启动窗口服务并检查是否停止
本文关键字:是否 检查 窗口 服务 启动 | 更新日期: 2023-09-27 18:27:48
作为我的问题:线程完成时停止程序?
我有一个窗口服务和一个aspx页面。在aspx页面中,我必须启动服务。此服务将运行一个线程,线程完成后,它将停止该服务。之后,我的aspx页面必须在屏幕上显示结果。
所以,我必须:检查服务是否正在运行-启动服务-检查服务是否停止-将结果打印到屏幕上。
目前,我的代码如下:
while(true){
if(isServiceStop){
MyService.Start();
while(true){
if(isServiceStop){
Print result;
break;
}
}
break;
}
}
这样,它将使我的CPU_Userage飙升,所以,我想知道是否有其他方法可以实现我的请求
创建两个EventWaitHandle对象来指示服务的状态:
private EventWaitHandle ServiceRunningEvent;
private EventWaitHandle ServiceStoppedEvent;
// in service startup
ServiceRunningEvent = new EventWaitHandle(False, EventResetMode.Manual, "RunningHandleName");
ServiceStoppedEvent = new EventWaitHandle(False, EventResetMode.Manual,
"ServiceStoppedEvent");
// Show service running
ServiceStoppedEvent.Reset();
ServiceRunningEvent.Set();
当服务退出时,让它翻转值:
ServiceRunningEvent.Reset();
ServiceStoppedEvent.Set();
在ASP.NET应用程序中,您可以以相同的方式创建等待句柄,但不是设置它们的值,而是等待它们。因此:
// if service isn't running, start it and wait for it to signal that it's started.
if (!ServiceRunningEvent.WaitOne(0))
{
// Start the service
// and wait for it.
ServiceRunningEvent.WaitOne();
}
// now wait for the service to signal that it's stopped
ServiceStoppedEvent.WaitOne();
然而,我真的很想知道,为什么你会这么频繁地启动和停止一项服务。为什么不让服务一直运行,并在你需要它做事情时发送信号呢?
我发现服务有方法WaitForStatus,所以我只需要使用下面的代码,它就可以完美地工作:
Myservice.WaitForStatus(ServiceControllerStatus.Stopped);