gpt4 book ai didi

c# - 替换Windows窗体中的默认未处理错误对话框

转载 作者:行者123 更新时间:2023-12-03 07:51:02 25 4
gpt4 key购买 nike

当前,当我的Windows Forms程序中的一个表单中出现未处理的错误时,会 pop 一个对话框,其中包含许多无关紧要的细节,并且最终用户会感到困惑。

每当我的一种表单中发生未处理的错误时,我都想用一个更加用户友好的对话框替换该对话框(并使用选项卡式界面隐藏但提供技术细节)。

有没有办法用自定义对话框替换此默认对话框?

我的应用程序是MDI应用程序,因此,如果表单中发生错误,我想关闭该表单,以友好的方式显示该错误,并允许它们与应用程序中的其他窗口一起使用(除非存在严重错误) )。

最佳答案

我想到了几种方法。最简单的方法是通过侦听Application.ThreadException事件捕获所有未处理的异常

    [STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form1());
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message);
}

但是,这只会停止崩溃,而不会关闭MDI表单。如果停止发送线程,它将完全停止mdi表单(在mdi之外更容易,则表单可以在单独的线程中运行,可以在沙盒中启动)。

我通常要做的是运行所有沙盒代码。通常封装在一个 Action 对象中,但是我可以是一个简单的过程,例如
    public static bool Run(Action a)
{
try
{
a();
return true;
}
catch(Exception ex)
{
//custom error handling here
return false;
}
}

示例调用:
    private void button1_Click(object sender, EventArgs e)
{
Run( ()=>throw new Exception());
}

以标准方法运行还有一个好处,就是可以将其作为等待光标或日志进行控制。如果不是mdi环境,那么将有一些替代方案,但希望这是可行的。

关于c# - 替换Windows窗体中的默认未处理错误对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com