2010-03-12 116 views
3

我正在使用BackgroundWorker對象和它的DoAsync()方法從簡單的WinForms應用程序異步運行一些導入代碼。我遇到了一個問題,我不知道異常情況正在被拋出,線程過早死亡。我最終發現了這一點,現在知道在閱讀Unhandled exceptions in BackgroundWorker後拋出異常。如何在調用BackgroundWorker調用的代碼中調試未處理的異常?

但是,調試時仍然存在問題。我如何調試此代碼?我想我可以在不使用BackgrounWorker的測試應用程序中運行它,但有沒有一種方法可以按原樣進行調試?如果我逐句通過實際拋出異常的代碼,那麼當異常發生時,我只是將它踢出了一步。從RunWorkerCompletedEventHandler重新拋出異常自然也沒有多大幫助。

任何想法!?提前致謝!

+0

我現在在這裏看到了另一個答案,但標題並不像我的描述那樣。在這裏留下這個問題並將人們指向舊的問題是否有意義?這裏是現有的鏈接:http://stackoverflow.com/questions/258662/unhandled-exceptions-in-backgroundworker –

+0

其實,出於某種原因,我從來沒有得到任何例外。與他們所說的有關Visual Studio在DoWork線程中的斷開不同,我的不是!?我不認爲我在那裏有任何嘗試/捕獲...有沒有一個原因,它不會打破預期? –

+0

我是否可以在Visual Studio中的異常菜單中禁用此異常?我看到「Managed Debugging Assistants」下面的「AsynchronousThreaAbort」,但這似乎沒有做任何事情...... –

回答

6

爲什麼不使用VS的「Break On Exceptions」選項(Ctrl + Alt + E或Debug-> Exceptions並將複選框放在Thrown列中)?這會在任何異常拋出時停止你的程序執行。

+0

沒錯。我必須禁用線程拋出的異常。我認爲這是一個線程問題! –

0

如果您有源代碼,Visual Studio將只允許您進入代碼。如果你沒有源碼,那麼我建議學習如何使用winDBG。 MS有極好的教程在這裏:

http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx

它有一個學習曲線,需要一些時間,但我發現它是值得的。我已經使用這個工具來調試很多應​​用程序,這些應用程序突然崩潰,掛起CPU,或只是表現不佳。

相關問題