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



注意:我不经常进行.NET编程。通常我使用本机/MFC,所以我有点不知道如何在C#的上下文中正确地执行此操作。

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

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

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

那么回到问题上来:如何避免在C#控制代码的每个事件处理程序中添加try/catch块呢?有没有什么地方(可能是System.Forms…Control.WndProc?)可以捕捉所有.NET异常并向用户显示错误对话框?

您可以通过使用函数方法来减少样板代码。编写这样的函数:

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参数,但你应该知道。

相关内容

  • 没有找到相关文章

最新更新