C# BackgroundWorker线程何时终止?

C# BackgroundWorker线程何时终止?,c#,.net,winforms,multithreading,C#,.net,Winforms,Multithreading,我正在开发C#.NET windows窗体应用程序。其中我有一个主窗口和几个其他窗口窗体类(用作对话框)。我有一项计算密集型任务(需要3-4分钟)。当用户从菜单中选择此任务时,会弹出一个新的对话框(窗口)并获取用户所需的参数,它有一个进度条,显示任务的进度。我在这个对话框中使用BackgroundWorker来执行计算并报告进度。此BackgroundWorker还将所有中间值写入名为status.log的日志文件 问题是,当用户关闭此对话框时,需要关闭日志文件。我猜与此对象关联的Backgro

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

问题是,当用户关闭此对话框时,需要关闭日志文件。我猜与此对象关联的BackgroundWorker也将被销毁。因此,我甚至为这个对话框的
FormClosed
事件编写了处理程序,并在其中关闭了文件。但似乎那个位幕后工作者到那个时还并没有被杀。我的意思是,BackgroundWorker现在抛出一个异常,即文件已关闭&无法写入已关闭的流


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

后台工作线程不会被终止:它们将返回到线程池

处理事件


更新:回应您的评论:在表单关闭事件中,向后台工作人员发出取消的信号。请参阅对后台工作线程不会被终止的已接受答案:它们将返回到线程池

处理事件


更新:回应您的评论:在表单关闭事件中,向后台工作人员发出取消的信号。参见

的公认答案我不是说任务完成的情况。我已经在处理事件
RunWorkerCompleted
。我说的是当用户(突然)关闭计算中间的对话框时的情况。然后我还需要关闭文件,因为如果我再次启动对话框,它会抱怨该文件被其他进程使用。我不是说任务完成的情况。我已经在处理事件
RunWorkerCompleted
。我说的是当用户(突然)关闭计算中间的对话框时的情况。然后我还需要关闭该文件,因为如果我再次启动该对话框,它会抱怨该文件被其他进程使用。