Обработка исключений в функциях событий .NET (GUI) без лишних шаблонов? - PullRequest
2 голосов
/ 08 июня 2011

Примечание: я не занимаюсь программированием на .NET регулярно.Обычно я делаю нативный / MFC, поэтому я немного растерялся из-за того, как сделать это правильно в контексте C #.

Мы отображаем элемент управления .NET в контексте нативного Приложение MFC.Это означает, что поток GUI является собственным потоком, вызывающим WndProc элемента управления .NET.(Ну, по крайней мере, насколько я могу судить.)

Очевидно, мы не хотим выбросить исключения из наших (GUI) обработчиков событий, так как нет правильного обработчика внизстек вызовов, который их перехватит.

Насколько я могу судить, решение (я) с AppDomain / UnhandledExceptionEventHandler не имеют смысла в собственном приложении MFC.(Пожалуйста, исправьте меня, если я ошибаюсь.)

Итак, вернемся к вопросу: как мне избежать добавления блока try / catch в каждый обработчик событий контрольного кода C #?Есть ли какое-то место (возможно, System.Forms ... Control.WndProc?), Где я могу перехватить все исключения .NET и просто отобразить диалоговое окно с сообщением об ошибке пользователю?

1 Ответ

2 голосов
/ 08 июня 2011

Вы можете уменьшить стандартный код, используя функциональный подход.Напишите функцию, подобную этой:

public class Util
{
    public static void SafeCall(Action handler)
    {
      try
      {
           handler();
      }
      catch(Exception ex)
      {
         // process ex here
      }
}

И повторно используйте ее в каждом из ваших обработчиков событий GUI:

void MyEvent(object sender, EventArgs e)
{
    Util.SafeCall(()=>NameOfYourHandlerMethod(sender,e));
};

или

void MyEvent(object sender, EventArgs e)
{
    Util.SafeCall(
    delegate
    {
      // enter code here
    });
};

Это может потребовать некоторых дополнительныхработать, чтобы получить параметры отправителя / EventArgs так, как вы хотите, но вы должны понять это.

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