我有一个Windows Service
,当它开始时它会创建许多 backgroundworkers 。每个后台工作人员都会监视其内存中的队列,并处理待处理的项目。
创建后台工作人员的过程 - 窗口服务 - 停止(通过请求或因为崩溃)这些后台工作人员是否已停止或离开孤儿还在继续?
当Windows服务即将停止时,是否需要编写代码来停止backgropund工作?
答案 0 :(得分:2)
BackgroundWorker
使用IsBackground
设置为true的线程,这意味着当所有非后台线程终止时它将终止。
如果你的BackgroundWorker要做的事情不应该在它完成之前关闭,那么它应该在它开始关键部分之前设置Thread.CurrentThread.IsBackground = false
,然后将其设置回true
完成后。
编辑:值得添加的是,进程关闭(未处理的异常,通过任务管理器或替换等程序终止的进程)将结束所有线程。相反的是反过来;结束所有非后台线程将结束进程(并使用它们获取所有后台线程)。这就是你需要担心的是对请求进程终止的用户输入做出反应(服务停止,最后一个可见窗口关闭等)
答案 1 :(得分:0)
在.NET应用程序和服务中,当主线程终止所有子后台线程时终止。