2

从这里关闭应用程序是否会停止所有活动的BackgroundWorkers?似乎没有。

但是从这里如何在 Form 的 Closing 事件中停止 BackgroundWorker?似乎是的。

那么它是哪一个?

(编辑:我意识到BackgroundWorkers 可能会出现异常退出。但这有什么问题?这里的重点不是不要让正在运行的线程占用资源吗?)

4

2 回答 2

4

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

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

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

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

还值得注意的是,您提供的第二个链接要求一些更复杂的东西。在那篇文章中很清楚,关闭表单(如果它是主表单)将停止后台线程的执行。OP 正在尝试做的是告诉后台线程,“嘿,是时候完成了,我们在这里完成了”,然后让表单等待,直到后台线程可以很好地完成清理工作,而不仅仅是在执行某些操作时退出并强制中止线程。

于 2012-09-12T17:25:25.733 回答
1

当程序关闭时,您提供的两个具有正确答案BackgroundWorker的链接都将关闭。非托管资源是您必须担心显式关闭的资源。

于 2012-09-12T17:13:49.143 回答