我目前正在用 C# 开发一个程序,它监视服务的状态,在服务器上运行。我正在使用System.ServiceProcess.ServiceController的waitforstatus 功能。问题是,如果我将程序作为 Consol-Program 运行,一切正常,并且程序几乎可以实时检测状态变化。但是,如果我将它作为 Windows 服务运行,它的工作将非常不可靠且延迟。有人知道如何解决这个问题吗?
这里的代码(它在一个单独的线程中运行):
while (true)
{
lock (_myService)
{
_myService.Refresh();
if (_myState == ServiceState.running)
_myService.WaitForStatus(ServiceControllerStatus.Stopped);
else if (_myState == ServiceState.stopped)
_myService.WaitForStatus(ServiceControllerStatus.Running);
if (_myService.Status == ServiceControllerStatus.Running)
_myState = ServiceState.running;
if (_myService.Status == ServiceControllerStatus.Stopped)
_myState = ServiceState.stopped;
stateChanged?.Invoke(this, new ServiceStateChangeEventArgs(_name, _myState));
}
}