程序抛出目标调用错误?

时间:2013-11-25 19:20:27

标签: c# .net file

这是我写的代码

    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 个答案:

答案 0 :(得分: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有效。提供信息性消息,指出路径不正确,而不是给用户一些神秘的消息。