c# - 可以将 Application.Run() 方法放在 catch 中以避免应用程序终止吗?

标签 c# try-catch

我试图让(我的测试版)应用程序尽可能多地运行,所以我在 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/

相关文章:

c# - 在(反)序列化树中使用自己的 XmlSerializer 将已知类型列表传递给对象

c# - 当 RichTextBox 只是加载/空时,WPF EditingCommands 不工作?

java - 变量 g 可能尚未初始化

c# - 检测特定参数异常?

perl - 我怎么能捕捉到 "Unicode non-character"警告?

c# - WPF:以编程方式引发 SelectionChangedEvent

c# - 使用 c# 和 opencl 的内存对象分配失败

c# - 向 WCF ServiceContract 添加方法是否会破坏现有客户端?

scala - 方法抛出异常而不是返回 Try 以进行理解

node.js - Node and sequelize -> .catch(...) 没有按预期工作