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

Lor*_*tel 5 c# backgroundworker

C#,使用VS2010,我有一些没有意义的东西.

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

触发代码:

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

以及正在蓬勃发展的东西DatabaseLoaded().

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

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

我疯了还是微软?

Sam*_*m B 16

RunWorkerCompleted将在发生错误时调用(例如未处理的异常Database.Load()).检查的Error属性RunWorkerCompletedEventArgs.