[英]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
。 检查RunWorkerCompletedEventArgs
的Error
属性。
可能是Database.Load()
抛出异常。 BackgroundWorker
在触发RunWorkerCompleted
事件之前捕获任何未处理的异常。 检查DatabaseLoaded
的RunWorkerCompletedEventArgs.Error
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.