2013-11-25 110 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 –