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()
然后是未处理的异常框(加载器甚至没有构建空表,更不用说填充它们了。)
我疯了还是微软?
答案 0 :(得分:17)
RunWorkerCompleted
中的未处理异常),将调用 Database.Load()
。检查Error
的{{1}}属性。
答案 1 :(得分:4)
Database.Load()
可能会引发异常。 BackgroundWorker
在触发RunWorkerCompleted
事件之前捕获任何未处理的异常。查看RunWorkerCompletedEventArgs.Error
中的DatabaseLoaded
媒体资源。