服务中的OnStop方法用于结束工作线程

本文关键字:结束 工作 线程 用于 方法 OnStop 服务 | 更新日期: 2023-09-27 18:14:01

我目前正在研究c#下的服务,并研究了OnStart应该如何编程(使用工作线程,以便OnStart不阻塞),... .现在我想知道的是,当OnStop被调用时,工作线程(如果它们是无限循环)应该如何停止。据我所知,Thread。Abort是一个很糟糕的做法,我的第一个想法是使用一个取消令牌,就像下面这个例子:

Class MyServiceClass : ServiceBase
{
    ......
    bool serviceFinished;
    Thread worker;
    protected void OnStart(string[] args)
    { 
       serviceFinished = false;
       worker = new Thread (MyFunction);
       worker.Name = "MyFunctionWorker";
       worker.IsBackground = false;  //This is important to set!
       worker.Start();
    }
    private void MyFunction()
    {
        while (serviceFinished == false)
        {
             ..... // Do whatever I want to do in this function
        }
    }
    protected override void OnStop()
    {
        serviceFinished = true;
        worker.Join(new TimeSpan(0,2,0));
    }

我在这里用了一个消去符号。就像我提到的,我的问题是服务中的线程是如何处理和结束的,还是应该以完全不同的方式结束服务中的线程?

服务中的OnStop方法用于结束工作线程

这是可以的,但是请使用

volatile bool serviceFinished

,否则编译器优化可能会取代你的

while (serviceFinished == false)

while (false)

更多信息请阅读msdn volatile http://msdn.microsoft.com/en-us/library/x13ttww7.aspx