2010-08-02 198 views
1

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

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

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

回答

1

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

处理RunWorkerCompleted事件。

更新:回复您的评论:在表单的关闭事件中,指示后台工作者取消。看到接受的答案.NET: How to wait for a BackgroundWorker to cancel?

+0

我不是在谈论任务完成的情况。我已经处理了“RunWorkerCompleted”事件。我正在谈论用户(突然)在计算过程中关闭对话框的情况。然后我也需要关闭文件,因为如果我再次启动对话框,它会抱怨文件被其他进程使用。 – claws 2010-08-02 03:46:50