Как я могу получить исключение потока для завершения только текущей команды или приложения WinForms? - PullRequest
0 голосов
/ 16 сентября 2011

В моем приложении .NET Windows Forms есть различные команды, вызывающие мои командные функции, которые могут генерировать исключения, обработанные моим обработчиком в Application.ThreadException. Я хотел бы, чтобы этот обработчик завершал командную функцию без завершения приложения, даже в случае командной функции, которая не имеет try / catch. Какой лучший способ получить это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Другое предложение - использовать класс Task (так как он поддерживает Cancellation )

0 голосов
/ 16 сентября 2011

Самый простой подход - заключить каждую из ваших «команд» в отдельный блок try / catch, что вы можете сделать довольно общим способом.Просто поймайте исключение, прежде чем оно попадет в цикл обработки сообщений.Поэтому, если бы у вас было:

public void ClickHandler(object sender, EventArgs e)
{
    ExecuteCommand("foo");
}

, вы бы получили:

public void ClickHandler(object sender, EventArgs e)
{
    ExecuteInTryCatch(() => ExecuteCommand("foo"));
}

private static void ExecuteInTryCatch(Action action)
{
    try
    {
        action();
    }
    catch (Exception e)
    {
        // Log exception
    }
}

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

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