2009-01-07 41 views
0

我試圖捕捉意想不到的未處理的異常的方法有兩種:異常拒絕辦理

static void Main() 
     { 
      AppDomain.CurrentDomain.UnhandledException += 
       new UnhandledExceptionEventHandler(ErrorHandler.HandleException); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      try 
      { 
       Application.Run(new OCR()); 
      } 
      catch (Exception ex) 
      { 
       ErrorWindow errorWindow = new ErrorWindow(ex); 
       errorWindow.ShowDialog(); 
       Application.Exit(); 
      } 
     } 

當我使用Visual Studio中執行應用程序,一切工作正常。如果我在bin \ Debug文件夾中使用exe文件,則不處理異常。應用程序的行爲就像catch塊不在那裏一樣。我無能爲力。有任何想法嗎?

編輯:抗辯NIS在負載不thron

+0

也許更具體一點,它可能是有用的例外。 – GWLlosa 2009-01-07 14:33:33

回答

2

我應該處理System.Windows.Forms.Application.ThreadException - 然後它工作。

+0

仍然不知道try catch塊有什麼問題,但至少該處理程序工作正常。 – agnieszka 2009-01-07 14:45:12

4

我認爲你有你的窗體的方法OnLoadLoad事件異常,那麼。這是一個臭名昭着的問題,IDE沒有幫助它使其行爲有所不同。基本上,你需要確保你的OnLoad/Load不會拋出......也許把catch放在那裏,然後設置一個你可以檢查的屬性?

+0

好吧,這是真的!我確實把它放在負載看看會發生什麼。但在此之前,我有一個異常在代碼的不同部分拋出,加載後很長時間。我沒有try catch塊,但是有一個UnhandledException處理程序,它也沒有被觸發。 – agnieszka 2009-01-07 14:17:13

0

我在處理J#代碼時遇到了一個有趣的問題。

假設拋出的異常類型爲FreakyException。現在,FreakyException繼承自FreakyExceptionBase類,後者繼而從Exception類繼承。訣竅是它們中的每一個都是在它們自己的程序集中定義的。說,FreakyExceptionBase駐留在ExceptionBases.dll,但FreakyException本身駐留在Worker.dll。您的應用程序僅引用Worker.dll,但不引用ExceptionBases.dll

在這種情況下,您catch(Exception)不會趕上FreakyException因爲.NET將無法弄清楚,指定FreakyException實際上繼承形式Exception繼承鏈。

這發生在J#代碼中,因爲J#異常繼承自java.lang.exception,並且我的項目沒有引用J#庫。當引用J#時,問題就消失了。

也許這與你的應用程序是一樣的情況?

+0

不是因爲我在拋出ArgumentException,而是從確實繼承了system.exception。 很高興知道你寫的是什麼。 – agnieszka 2009-01-07 14:44:30

相關問題