【问题标题】:When does BackgroundWorker thread get killed?BackgroundWorker 线程何时被杀死?
【发布时间】:2011-03-24 00:39:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net winforms multithreading


    【解决方案1】:

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

    处理RunWorkerCompleted 事件。

    更新:回应您的评论:在表单的关闭事件中,向后台工作人员发出信号以取消。查看.NET: How to wait for a BackgroundWorker to cancel?的已接受答案

    【讨论】:

    • 我不是说任务完成的情况。我已经在处理事件RunWorkerCompleted。我说的是用户(突然)在计算过程中关闭对话框的情况。然后我还需要关闭文件,因为如果我再次启动对话框,它会抱怨文件被其他进程使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多