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