C#:为什么我的后台工作程序线程信号在没有完成时完成?

时间:2010-12-20 22:19:46

标签: c# backgroundworker

C#,使用VS2010,我有一些毫无意义的东西。

启动时,我的程序需要从文本文件加载数百k。在确保加载代码工作正常后,我将它放在后台线程中。只要从IDE内部运行一切都很好,但是当它独立运行时,线程会说它已经完成了。这当然是热潮。

触发代码:

BackgroundWorker Background = new BackgroundWorker();
Background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DatabaseLoaded);
Background.DoWork += new DoWorkEventHandler(delegate { Database.Load(); });
Background.RunWorkerAsync();

并且正在蓬勃发展的东西在DatabaseLoaded()

我放了一些消息框来跟踪发生了什么:Load()方法的第一行和最后一行以及DatabaseLoaded()的第一行。

在IDE中,这会按照我的预期触发:Load()开始,Load()完成,DatabaseLoaded()。但是,当独立运行时,我得到Load()开头,DatabaseLoaded()然后是未处理的异常框(加载器甚至没有构建空表,更不用说填充它们了。)

我疯了还是微软?

2 个答案:

答案 0 :(得分:17)

如果出现错误(例如RunWorkerCompleted中的未处理异常),将调用

Database.Load()。检查Error的{​​{1}}属性。

答案 1 :(得分:4)

Database.Load()可能会引发异常。 BackgroundWorker在触发RunWorkerCompleted事件之前捕获任何未处理的异常。查看RunWorkerCompletedEventArgs.Error中的DatabaseLoaded媒体资源。