BackgroundWorker线程何时被杀死?

时间:2010-08-02 03:40:18

标签: c# .net winforms multithreading

我正在开发C#.NET windows Forms应用程序。其中我有一个主窗口和一些其他窗口窗体类(用作对话框)。我有一个计算密集型的任务(需要3-4分钟)。当用户从菜单中选择此任务时,会弹出一个新的对话框(窗口),并从用户那里获取所需的参数,并且它有一个显示任务进度的进度条。我在此对话框中使用BackgroundWorker来执行计算和报告进度。此BackgroundWorker还将所有中间值写入名为status.log的日志文件。

问题是,当用户关闭此对话框时,需要关闭日志文件。我猜这个与此对象相关的BackgroundWorker也会被破坏。所以,我甚至为这个对话框的FormClosed事件编写了处理程序并关闭了该文件。但似乎BackgroundWorker并没有被杀死。我的意思是,BackgroundWorker现在抛出一个异常,即文件已关闭&无法写入已关闭的流。

如何处理这种情况?我什么时候应该关闭文件流? BackgroundWorker线程什么时候被杀死?

1 个答案:

答案 0 :(得分:1)

后台工作线程不会被杀死:它们会被返回到线程池。

处理RunWorkerCompleted事件。

更新:回复您的评论:在表单的关闭事件中,通知后台工作人员取消。请参阅.NET: How to wait for a BackgroundWorker to cancel?

的已接受答案