日期:2014-05-18  浏览次数:21014 次

C# WinForm程序出错的时候,如何自动重启
因为程序是一个融合平台,调用到很多第三方程序和服务,很多时候并不是自己程序错误,而是第三方程序和服务的意外错误,导致程序崩溃,理论上当然也是程序没有做好异常的处理,但是有些异常相当不好处理;
  所以想当程序出现一些致命错误的时候,或者第三方程序和服务导致程序死掉的时候,怎么自动重启程序,不要用进程Process来处理,很多时间实际上进程依然在,但是程序因为没有确认退出,进程依然在那里的

------解决方案--------------------
我觉得其实在内部捕捉异常比较合理
所有的 #界面操作/新线程操作/Control.Invoke# 都用 try catch 保护, 然后在一些高危界面下重载 WndProc(), 改为 try { base.WndProc } catch ...
这样基本能够避免意料不到的错误了
------解决方案--------------------
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch
{
Application.Restart();
}
}
}
------解决方案--------------------
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.ThreadException+=new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Application.Restart();
}
------解决方案--------------------
写自定义异常类,在catch里
Application.Restart();
------解决方案--------------------
Main函数里重启应该可以