2010-12-20 58 views
5

C#,使用VS2010,我有一些没有意义的东西。C#:为什么我的后台工作线程信号完成时,它不是?

在启动时我的程序需要从文本文件中加载几百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(),然后是未处理的异常框(加载程序甚至没有建立空表,更不用说填充它们了。)

我是坚果还是Microsoft?

回答

17

RunWorkerCompleted将在错误的情况下被调用(例如Database.Load()中未处理的异常)。检查RunWorkerCompletedEventArgsError财产。

+0

就是这样。出于某种原因它GetExecutingAssembly()。位置返回了一个不同的路径,它没有找到一切。 – 2010-12-21 00:58:52

4

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

+0

这里有回声吗? – Gabe 2010-12-20 22:29:41

+0

:-)只有两个答案几乎在同一时间发布...将有趣的看谁的会得到更多upvotes:-D – 2010-12-20 22:30:50

+0

其实你的是5分钟后发布。 – Gabe 2010-12-20 22:33:05

相关问题