从这里开始Does closing the application stops all active BackgroundWorkers?看来不是。
但是从这里开始How to stop BackgroundWorker on Form's Closing event?看来是的。
那么它是哪一个呢?
(编辑:我意识到 BackgroundWorker
可能会因异常退出。但这有什么问题吗?这里的重点不是不要留下占用资源的正在运行的线程吗?)
最佳答案
关闭表单
不会停止该表单启动的所有后台工作人员。
当整个应用程序结束时,它将停止所有后台线程。
关闭主窗体(除非您修改了 Main
方法来执行其他操作)将结束整个应用程序。
您引用的每个问题都是正确的。如果关闭主窗体,则整个应用程序将结束,后台工作程序将自行关闭。如果正在关闭的窗体不是主窗体,而是其他窗体,并且您希望后台工作程序开始停止它,那么您需要自己执行此操作。
还值得注意的是 second link您提供的内容要求一些更复杂的东西。该文章清楚地表明,关闭表单(如果它是主表单)将停止后台线程的执行。 OP 试图做的是告诉后台线程,“嘿,是时候完成了,我们已经完成了”,然后让表单等待,直到后台线程可以很好地完成清理工作,而不仅仅是当线程正在执行某些操作时退出并强制中止线程。
关于c# - 当用户关闭表单时,我是否必须关闭正在运行的BackgroundWorkers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393195/