启动窗口服务并检查是否停止

本文关键字:是否 检查 窗口 服务 启动 | 更新日期: 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);