2013-11-25 4 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

вам лучше попробовать найти, почему исключение выбрано, разрешить его и добавить попытку - последняя попытка предотвратить сбой приложения от какого-либо скрытого исключения времени выполнения. –

ответ

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 (новый FormClass()), ' –

+0

Я убедился, что все это, но все же исключение происходит. Я отправляю трассировку стека, пожалуйста, проверьте его. –

+0

И я думаю, что код в вашем вопросе находится где-то в 'FormClass'? Необработанные исключения перебрасываются вверх по стеку, и строка в вашем комментарии, вероятно, является последним фреймом стека, для которого у вас есть код, поэтому необработанное исключение взорвется там. Подробнее об обработке исключений читайте здесь: http://msdn.microsoft.com/en-us/library/ms173160.aspx –

Смежные вопросы