我试图让(我的测试版)应用程序尽可能多地运行,所以我在 Program.cs
中放置了另一个 try-catch
发生严重错误并意外关闭应用程序的情况。在 catch
中,我重写了 Application.Run()
方法,以便应用程序可以在终止后自行恢复无论出于何种原因。
针对这个特定场景制定这样的计划是否正确?
如果不对,那么为了保持程序运行还有什么建议?
这是演示我的意思的示例代码:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Hossein;
using Pishro.Classes;
namespace Pishro
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
catch(Exception exc)
{
API.SaveAndShowLog(exc);
Application.Run(new frmMain());
}
}
}
}
最佳答案
全局处理异常是记录和警报的好主意。
是的,像您这样的自动重启策略可能很有用。但是存在风险:如果崩溃损坏了全局数据结构,则重新启动应用程序可能会产生不可预知的结果,例如静默数据损坏。例如,文件可能仍处于打开和锁定状态。锁定可能尚未释放。静态变量可能处于未定义状态。恶意线程可能仍在运行,不知道应用程序 UI 已被破坏。
我建议您通过启动应用程序的新进程来重新启动应用程序。让旧流程消亡。
关于c# - 可以将 Application.Run() 方法放在 catch 中以避免应用程序终止吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579796/