在没有过多样板的情况下处理.NET(GUI)事件函数中的异常?

时间:2011-06-08 09:33:38

标签: .net user-interface exception mfc

注意:我不定期进行.NET编程。通常我会使用native / MFC,所以我在C#的上下文中如何正确地执行此操作有点迷失。

我们在 native MFC应用程序的上下文中显示.NET控件。这意味着GUI线程是调用.NET控件的WndProc的本机线程。 (好吧,至少据我所知。)

显然,我们想要从我们的(GUI)事件处理程序中抛出异常,因为调用堆栈中没有适当的处理程序可以捕获它们。

据我所知,AppDomain / UnhandledExceptionEventHandler的解决方案在本机MFC应用程序中没有意义。 (如果我错了,请纠正我。)

回到这个问题:我怎样才能避免为C#控制代码的每个事件处理程序添加一个try / catch块?是否有一些地方(System.Forms ... Control.WndProc可能吗?),我可以捕获所有.NET异常并只向用户显示一个错误对话框?

1 个答案:

答案 0 :(得分:2)

您可以使用功能方法来减少样板代码。写一个这样的函数:

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
    });
};

这可能需要一些额外的工作来按照你想要的方式获取sender / EventArgs参数,但你应该明白这一点。