2012-12-11 45 views
0

以前我使用過Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException,但通常我只將它用於單個表單。所以通常我會使用Program.cs中的Main在構造函數中使用線程異常和應用程序域未處理的異常

try { 
    AppDomain.CurrentDomain.UnhandledException += (sender, e) => .Handle(sender, (Exception)e.ExceptionObject); 
    Application.ThreadException += (sender, e) => ExceptionHandler.Handle(sender, e.Exception); 
    Application.Run(ApplicationBase); 
} catch (Exception ex) { 
    MessageBox.Show("Handled Exception"); 
} 

在我的新情況,但是我有我的當前項目的主機形式與一個單一的基本形式,其他形式繼承。

我想要做的是處理從基礎表單中的代碼中派生的形式拋出的異常 - 我將上面的代碼plongked到我的基礎的構造函數希望我可以這樣做,但是當有異常時,它不會發生事件。

爲什麼我不能在構造函數和任何其他方法中做到這一點?

注:我以前問這Vb.net,而不是C#所以刪除了我剛纔的問題和重構我的代碼,所以我可以有一個C#答案。

回答

1

這些事件是全球事件;他們與個人形式無關。

您可以將當前的代碼保存在Main()中,它可以在多種形式下正常工作。 (除非你有多個UI線程)

+0

但是你需要調用'Applicaiton.Run(Form)',並且我有多個可能被運行的窗體 - 所以我想在Base窗體中處理它,可能會運行。 – LukeHennerley

+0

@LukeHennerley:這些是**全球**事件。它們適用於在UI線程上運行的所有**代碼。 – SLaks