3

我的 Windows 服务正在 OnStart() 方法中创建 1 个线程。线程代码包含 1 个 while 循环,如下所示:

    Thread mworker;       
    AutoResetEvent mStop = new AutoResetEvent(false); 
     protected override void OnStart(string[] args)
{
    // TODO: Add code here to start your service.

    mworker = new Thread(pwd_fetch);
    mworker.IsBackground = false;
    mworker.Start();
}

protected override void OnStop()
{
    // TODO: Add code here to perform any tear-down necessary to stop your service.
    mStop.Set();
    mworker.Join();
}

private void pwd_fetch()
{
    while(true)
    {
        //some other code

        if (mStop.Set()==true)
            break;
    }
}

我希望 while 循环条件为真,但要打破循环,我正在使用 if() 指令,但仍然无法停止服务。

有谁知道,为什么会这样?我怎么解决这个问题?

4

5 回答 5

2

要停止服务,您必须调用 servicecontroller 实例并停止它

ServiceController service = new ServiceController("ServiceName");
service .Stop();
于 2012-06-28T10:05:44.870 回答
2

在您的线程循环方法中,您需要使用 mStop.WaitOne (有超时)。调用 set 将设置句柄......这不是你想要在这里做的。

 if (mStop.WaitOne(500))
     break;
于 2012-06-28T10:07:28.503 回答
0

1.Use a boolean variable instead of "true" always in while loop Then you can set it to false where you need to terminate the codes inside the loop.

2.Call mworker.Abort() to stop the thread.

3.Stop service by

new ServiceController("ServiceName").Stop();

于 2012-07-04T06:35:17.103 回答
0

您必须在服务启动事件中添加线程代码,而不是在启动时添加。

于 2012-06-28T10:17:24.143 回答
0

如果您希望服务自行停止,您可以简单地调用:

this.Stop()
于 2012-06-28T10:08:23.083 回答