从这里Does closing the application stops all active BackgroundWorkers?似乎没有。
但是从这里How to stop BackgroundWorker on Form's Closing event?看来是的。
那是哪个?
(编辑:我意识到BackgroundWorker
可能会以异常方式退出。但问题是什么呢?这不是不留下占用资源的运行线程吗?)
答案 0 :(得分:4)
关闭Form
不会停止该表单启动的所有后台工作人员。
当整个应用程序结束时,将停止所有后台线程。
关闭主窗体(除非您已修改Main
方法以执行其他操作)将结束整个应用程序。
您引用的每个问题都是正确的。如果关闭主窗体,则整个应用程序将结束,后台工作程序将自行关闭。如果正在关闭的表单不是主表单,而是其他表单,并且您希望后台工作程序开始停止,那么您需要自己完成。
值得注意的是,您提供的second link要求更复杂的东西。在帖子中很清楚,关闭表单(如果它是主表单)将停止执行后台线程。 OP试图在那里做的是告诉后台主题,“嘿,是时候完成了,我们在这里完成了”然后让表单等到后台线程可以很好地完成清理工作,而不仅仅是在正在做某事的过程中退出并强行中止线程。
答案 1 :(得分:1)
您提供的这两个链接都有正确答案 - 程序关闭后将关闭BackgroundWorker
。 非托管资源是您必须担心明确关闭的资源。