Как перехватить NotImplementedException в приложении WPF? - PullRequest
0 голосов
/ 12 февраля 2009

Как перехватить 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)

Но это как-то неуместно и не сработает, если исключение NotImplementedException было скрыто от интерфейса.

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

Ответы [ 3 ]

6 голосов
/ 12 февраля 2009

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

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

3 голосов
/ 12 февраля 2009

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

0 голосов
/ 13 февраля 2009

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

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

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

...