这是我写的代码
if(Condition)
{
try
{
System.Diagnostics.Process.Start(Path) ;
}
catch ( Win32Exception Error)
{
MessageBox.Show(Error.Message) ;
}
}
现在,当我向
提供无效输入时 Path
即一个不存在的文件,而不是抛出Win32异常,我的应用程序正在抛出
TargetInvocationError
我该如何纠正? ![在此处输入图像说明] [1] 这是堆栈跟踪
然后我尝试添加行
catch(FileNotFoundException Error)
{
MessageBox.Show(Error.Message) ;
}
但仍然会抛出TargetInvocationException
。
答案 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
有效。提供信息性消息,指出路径不正确,而不是给用户一些神秘的消息。