服务中的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));
}
我在这里用了一个消去符号。就像我提到的,我的问题是服务中的线程是如何处理和结束的,还是应该以完全不同的方式结束服务中的线程?
这是可以的,但是请使用
volatile bool serviceFinished
,否则编译器优化可能会取代你的
while (serviceFinished == false)
while (false)
更多信息请阅读msdn volatile http://msdn.microsoft.com/en-us/library/x13ttww7.aspx