Автоматически выходить из программы при сбое? - PullRequest
0 голосов
/ 10 июня 2011

Есть ли способ заставить программу остановиться и выйти из программы в случае ее сбоя? Я использую C # для разработки программы, и машины, на которых она запущена, являются 32-битными машинами Windows 7 Professional.

Так, например, когда мой X.exe падает, появляется небольшое всплывающее окно с 2 вариантами: 1 - Ищите решения онлайн. 2 - Stop X.exe

Я хочу, чтобы второй вариант был выбран автоматически, и моя программа остановлена. У меня есть другая программа, которая контролирует X.exe, поэтому, когда X.exe остановлен, он запускает новый экземпляр X.exe.

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Вы можете добавить глобальный обработчик исключений для необработанных исключений.Этот обработчик всегда вызывается, когда ваша программа не обработала исключение во время выполнения, которое вызовет сбой программы:

В Wpf-Applications вы можете добавить обработчик следующим образом:

App.Current.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler( Current_DispatcherUnhandledException );

То же самое для WinForms:

System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler( OnThreadException );

и для консольных приложений:

System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( OnUnhandledException );
2 голосов
/ 10 июня 2011

Этот код должен вам помочь:

public static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // catch app errors
    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    try
    {
        Application.Run(new Form());
    }
    catch (Exception exc)
    {
        // show popupform
        PopupForm popup = new PopupForm();
        if(popup.ShowDialog() == DialogResult.OK)
        {
            Application.Restart();
        }
        else
        {
            Application.Exit();
        }
    }
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    // show popupform
    PopupForm popup = new PopupForm();
    if(popup.ShowDialog() == DialogResult.OK)
    {
        Application.Restart();
    }
    else
    {
        Application.Exit();
    }
}

Lg warappa

...