2013-11-25 76 views
0

這裏是我寫程序拋出目標調用錯誤?

if(Condition) 
    { 
     try 
     { 
      System.Diagnostics.Process.Start(Path) ; 
     } 
     catch (Win32Exception Error) 
     { 
      MessageBox.Show(Error.Message) ; 
     } 
    } 

現在的代碼,當我提供了無效的輸入

Path 

即不存在的,而不是拋出的Win32異常,文件,我的應用程序是投擲

TargetInvocationError 

我該如何糾正? ![請在此輸入圖像說明] [1] 這裏是堆棧跟蹤

enter image description here

然後我嘗試添加行

catch(FileNotFoundException Error) 
    { 
     MessageBox.Show(Error.Message) ; 
    } 

但仍TargetInvocationException被拋出。

+1

您最好試着找出異常拋出的原因,解決它並添加try-catch是防止應用程序被某些隱藏的運行時異常崩潰的最後一次嘗試。 –

回答

1

要麼您抓住TargetInvocationException,要麼捕獲層次結構中較高級的異常,如基類Exception

像這樣:

try 
{ 
    System.Diagnostics.Process.Start(Path) ; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message) ; 
} 

其他選項是她倆

try 
{ 
    System.Diagnostics.Process.Start(Path) ; 
} 
catch (TargetInvocationException ex) 
{ 
    MessageBox.Show(ex.Message) ; 
} 
catch (Win32Exception ex) 
{ 
    MessageBox.Show(ex.Message) ; 
} 

然而,「規劃有例外」不建議(即使用異常爲您的應用程序流程的一部分)。請確保在嘗試使用它之前確保Path有效。提供信息性消息,指出路徑不正確,而不是給用戶一些神祕的信息。

+0

但是,當拋出'TargetInvocationException'時,調試器指向語句'Application.Run(new FormClass());' –

+0

我已經確認了所有這些,但仍然發生異常。我張貼堆棧跟蹤,請檢查它。 –

+0

我想你的問題中的代碼是'FormClass'中的某個地方?未處理的異常會在堆棧中向上拋出,並且註釋中的行可能是您擁有代碼的最後一個堆棧幀,因此未處理的異常將在那裏爆炸。請閱讀有關異常處理的更多信息:http://msdn.microsoft.com/en-us/library/ms173160.aspx –