我编写了一个 Windows 服务,它尝试从 MSMQ 读取消息并处理它们。我在我的项目中添加了一个安装程序,并将启动设置为手动。我安装服务,然后通过服务工具启动它。然后我可以返回我的项目并附加到流程以逐步执行代码。
但是,无论我做什么,我都无法通过代码或服务工具停止服务。我只能认为这是因为我正在使用 ManualResetEvent 类来控制服务。这是我的代码。我正在尝试测试错误部分,因为此时它应该抛出错误并停止服务。
在我的服务课程中,我有:
private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
    private Thread _thread;
    public TestService()
    {
        InitializeComponent();
    }
    protected override void OnStart(string[] args)
    {
        _thread = new Thread(WorkerThread)
        {
            Name = "Test Messaging Reader Service Thread",
            IsBackground = true
        };
        _thread.Start();
    }
    protected override void OnStop()
    {
        _shutdownEvent.Set();
        if (!_thread.Join(3000))
        { // give the thread 3 seconds to stop
            _thread.Abort();
        }
        IError logger = new Logger();
        Exception ex = new Exception("The Test Messaging Service has been stopped.");
        logger.Log(this, SeverityEnum.Warning, ex);
    }
    private void WorkerThread()
    {
        try
        {
            while (!_shutdownEvent.WaitOne(0))
            {
                TestMessageQueueReader processQueue = new TestMessageQueueReader();
                processQueue.ReadFromQueue();
                _shutdownEvent.Set();
                _shutdownEvent.Reset();
            }
        }
        catch (Exception)
        {
            _shutdownEvent.Set();
            _shutdownEvent.Close();
        }
    }
当我单步执行代码时,它确实会按预期进入异常,此时我希望能够停止服务。