1

我目前正在用 C# 开发一个程序,它监视服务的状态,在服务器上运行。我正在使用System.ServiceProcess.ServiceControllerwaitforstatus 功能。问题是,如果我将程序作为 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));
            }
        }
4

0 回答 0