gpt4 book ai didi

c# - 如何避免错误消息窗口

转载 作者:行者123 更新时间:2023-12-02 17:51:29 27 4
gpt4 key购买 nike

我们在服务器实例上有一个应用程序而且很少见,但是我们有内存不足异常(程序没有泄漏,只是实例很小并且它使用大量数据运行)。

这不是问题,因为我们会监控该服务器实例上的进程,如果在进程列表中找不到某些进程,则会发送警报电子邮件。

现在的问题是:

enter image description here

这可以防止进程从进程列表中消失,因此我们不会收到有关其失败的警报电子邮件。是否可以禁用此消息,即如果程序因我们未捕获到的内容而失败,它将在没有用户交互的情况下关闭?

最佳答案

假设使用 Windows 窗体,我通常会执行多个步骤来防止出现此消息框。

首先,我在 Main 函数中连接了几个处理程序:

[STAThread]
private static void Main()
{
Application.ThreadException +=
application_ThreadException;

Application.SetUnhandledExceptionMode(
UnhandledExceptionMode.CatchException);

AppDomain.CurrentDomain.UnhandledException +=
currentDomain_UnhandledException;

Application.Run(new MainForm());
}

当发生未处理的异常时,将调用这些处理程序。我会这样定义它们:

private static void application_ThreadException(
object sender,
ThreadExceptionEventArgs e)
{
doHandleException(e.Exception);
}

private static void currentDomain_UnhandledException(
object sender,
UnhandledExceptionEventArgs e)
{
doHandleException(e.ExceptionObject as Exception);
}

随后调用的实际 doHandleException 函数执行实际的错误处理。通常这是记录错误并通知用户,让他选择继续应用程序或退出应用程序。

来自真实世界应用程序的示例如下所示:

private static void doHandleException(
Exception e)
{
try
{
Log.Instance.ErrorException(@"Exception.", e);
}
catch (Exception x)
{
Trace.WriteLine(string.Format(
@"Error during exception logging: '{0}'.", x.Message));
}

var form = Form.ActiveForm;
if (form == null)
{
MessageBox.Show(buildMessage(e),
"MyApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show(form, buildMessage(e),
"MyApp", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

辅助函数:

public static string buildMessage(Exception exception)
{
var result = new StringBuilder();

while (exception != null)
{
result.AppendLine(exception.Message);
result.AppendLine();
exception = exception.InnerException;
}

return result.ToString().Trim();
}

如果您使用的不是 Windows 窗体,而是例如在控制台应用程序或 WPF 中,一些处理程序不存在,而另一些则存在。

想法保持不变:如果您的代码块周围没有 try...catch,则订阅正在调用的事件处理程序。

就个人而言,我尝试尽可能少地使用 try...catch block (最好没有)。

关于c# - 如何避免错误消息窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632426/

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