2009-02-12 3 views
0

Как перехватить исключение NotImplementedException в приложении WPF?Как перехватить исключение NotImplementedException в приложении WPF?

я иногда бросить NotImplementedException во время тестирования моего приложения WPF в незавершенном:

Private Sub ButtonDoSomething_Click(...) Handles ButtonDoSomething.Click 
    Throw New NotImplementedException(_ 
     "ButtonDoSomething_Click() not implemented.") 
End Sub 

Но я предпочел бы это не крах программы.

Я мог бы заменить все такие исключения бросков с:

MessageBox.Show("ButtonDoSomething_Click() not implemented.", _ 
    "Not Implemented", MessageBoxButton.OK, MessageBoxImage.Information) 

Но это кажется inellegant как-то и не будет работать, если NotImplementedException был похоронен далеко от границы раздела.

Как я могу захватить все такие исключения и отобразить окно сообщения?

ответ

6

Вы можете прикрепить к событию DispatcherUnhandledException в классе Application, который будет поднят в любое время при возникновении необработанного исключения. Там вы можете проверить свойство Exception в экземпляре DispatcherUnhandledExceptionEventArgs, переданном обработчику событий, чтобы узнать, имеет ли он тип NotImplementedException. Если это так, установите для свойства Handled значение true, а затем верните.

Следует отметить, что если вы вызвали MsgBox вместо того, чтобы выбрасывать исключение, у вас возникла бы проблема в том, что вы должны что-то действительно возвратить, и также установите все параметры out/ref, что было бы дополнительными накладными расходами.

3

Посмотрите на Application.DispatcherUnhandledException или AppDomain.UnhandledException. Оба позволяют обрабатывать необработанные исключения.

+0

Правда, однако, AppDomain.UnhandledException - это событие, которое создается AppDomain при обнаружении необработанного исключения. Независимо от того, что вы делаете, приложение сразу же выключится. –

0

Вместо того, чтобы бросать исключение NotImplementedException или использовать MessageBox, вы можете использовать Debug.Fail. Например:

Debug.Fail("This method is not implemented yet!"); 

Он выведет окно сообщения с предоставленным текстом и покажет вам трассировку стека.

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