后台工作程序是否在创建它们的进程完成时停止

时间:2014-01-16 13:14:24

标签: c# .net multithreading backgroundworker

我有一个Windows Service,当它开始时它会创建许多 backgroundworkers 。每个后台工作人员都会监视其内存中的队列,并处理待处理的项目。

创建后台工作人员的过程 - 窗口服务 - 停止(通过请求或因为崩溃)这些后台工作人员是否已停止或离开孤儿还在继续?

当Windows服务即将停止时,是否需要编写代码来停止backgropund工作?

2 个答案:

答案 0 :(得分:2)

BackgroundWorker使用IsBackground设置为true的线程,这意味着当所有非后台线程终止时它将终止。

如果你的BackgroundWorker要做的事情不应该在它完成之前关闭,那么它应该在它开始关键部分之前设置Thread.CurrentThread.IsBackground = false,然后将其设置回true完成后。

编辑:值得添加的是,进程关闭(未处理的异常,通过任务管理器或替换等程序终止的进程)将结束所有线程。相反的是反过来;结束所有非后台线程将结束进程(并使用它们获取所有后台线程)。这就是你需要担心的是对请求进程终止的用户输入做出反应(服务停止,最后一个可见窗口关闭等)

答案 1 :(得分:0)

在.NET应用程序和服务中,当主线程终止所有后台线程时终止。