我正在开发C# .NET windows窗体应用程序。其中我有一个主窗口和几个其他窗口窗体类(用作对话框)。我有一个计算密集型任务(需要3-4分钟)。当用户从菜单中选择此任务时,将弹出一个新的对话框(窗口),并获取用户所需的参数,并具有一个显示任务进度的进度条。我在此对话框中使用BackgroundWorker来执行计算和报告进度。此BackgroundWorker还将所有中间值写入名为status.log
的日志文件。
问题是,当用户关闭此对话框时,需要关闭日志文件。我猜与这个对象相关的BackgroundWorker也会被销毁。因此,我已经为这个对话框的FormClosed
事件编写了甚至处理程序,并在其中关闭了文件。但看起来到那时BackgroundWorker还没死。我的意思是,BackgroundWorker现在抛出了一个异常,文件是关闭的,不能写入关闭的流。
如何处理这种情况?我应该什么时候关闭文件流?什么时候BackgroundWorker线程会被杀死?
发布于 2010-08-02 11:42:14
后台工作线程不会被终止:它们被返回到线程池。
处理RunWorkerCompleted事件。
更新:响应您的评论:在窗体关闭事件中,通知后台工作人员取消。请参阅.NET: How to wait for a BackgroundWorker to cancel?的接受答案
https://stackoverflow.com/questions/3384850
复制相似问题