Показать форму, когда возникает исключение C # - PullRequest
1 голос
/ 05 сентября 2010

Я просматривал Windows API Code Pack 1.1 и видел пример ошибки и хотел бы интегрировать его в мое приложение. Основная идея - показать, есть ли какая-либо ошибка в приложении, а не какая-либо но некоторые, которые я выбираю.

Как я могу запрограммировать это?

Я использую WPF

Спасибо

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

В конструкторе вашего класса приложения добавьте:

   DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);

, затем добавьте метод к классу приложения, подобный следующему:

void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        e.Handled = true;
        if (MessageBox.Show("An unexpected error has occurred.  You should exit this program as soon as possible.\n\n" +
                            "Exit the program now?\n\nError details:\n" + e.Exception.Message,
                            "Unexpected error", MessageBoxButton.YesNo) == MessageBoxResult.Yes)

            Shutdown();
    }
1 голос
/ 05 сентября 2010

У вас может быть блок catch на верхнем уровне вашей программы, который будет отображать форму с соответствующими деталями ошибки.Или вы можете перехватывать необработанные исключения с помощью Application.UnhandledException (при условии, что вы используете winforms), Application.ThreadException и AppDomain.UnhandledException.

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

0 голосов
/ 05 сентября 2010

Следующее будет перехватывать все исключения и отображать их в окне сообщения:

[STAThread]
public static void Main() 
{
  Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
  Application.Run(new Form1());
}

private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
{
  // work with exception
  MessageBox.Show(e.Exception.Message);
}

Обратите внимание, что если вы сильно увлекаетесь многопоточностью, вы можете захотеть проверить его поведение с помощью приложения, насыщенного потоками.

Дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...