2010-12-20 55 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

相關問題