繁体   English   中英

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

[英]C#: Why is my background worker thread signaling done when it isn't?

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()然后是未处理的异常框(加载器甚至没有构建空表,更不用说填充它们了。)

我疯了还是微软?

如果出现错误(例如Database.Load()的未处理异常),将调用RunWorkerCompleted 检查RunWorkerCompletedEventArgsError属性。

可能是Database.Load()抛出异常。 BackgroundWorker在触发RunWorkerCompleted事件之前捕获任何未处理的异常。 检查DatabaseLoadedRunWorkerCompletedEventArgs.Error属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM