用户关闭表单时是否必须关闭运行的BackgroundWorkers?

时间:2012-09-12 17:10:33

标签: c# backgroundworker

从这里Does closing the application stops all active BackgroundWorkers?似乎没有。

但是从这里How to stop BackgroundWorker on Form's Closing event?看来是的。

那是哪个?

(编辑:我意识到BackgroundWorker可能会以异常方式退出。但问题是什么呢?这不是不留下占用资源的运行线程吗?)

2 个答案:

答案 0 :(得分:4)

关闭Form 会停止该表单启动的所有后台工作人员。

当整个应用程序结束时,停止所有后台线程。

关闭主窗体(除非您已修改Main方法以执行其他操作)将结束整个应用程序。

您引用的每个问题都是正确的。如果关闭主窗体,则整个应用程序将结束,后台工作程序将自行关闭。如果正在关闭的表单不是主表单,而是其他表单,并且您希望后台工作程序开始停止,那么您需要自己完成。

值得注意的是,您提供的second link要求更复杂的东西。在帖子中很清楚,关闭表单(如果它是主表单)将停止执行后台线程。 OP试图在那里做的是告诉后台主题,“嘿,是时候完成了,我们在这里完成了”然后让表单等到后台线程可以很好地完成清理工作,而不仅仅是在正在做某事的过程中退出并强行中止线程。

答案 1 :(得分:1)

您提供的这两个链接都有正确答案 - 程序关闭后将关闭BackgroundWorker非托管资源是您必须担心明确关闭的资源。