如何在出错时重新启动嵌入式NETMF C#程序?

时间:2014-04-08 20:38:06

标签: c#

我有一个小型,长期运行的嵌入式NETMF 程序,由于未知原因而停止(请参阅How do we trouble shoot a long-running NETMF program that stops in production?)。作为一种解决方法,我希望它在失败时自动重启。我的感觉是try-catch块可以做到这一点。怎么样?这甚至可能吗?有更好的方法吗?

public class Program
{
    private static Timer timer;      
    public static void Main()
    {
        Program p = new Program();

        Program.timer = 
            new Timer(this.TimerCallback_DoSomething, new object(), 0, 1000);

        Thread.Sleep(Timeout.Infinite);
    }

    private void TimerCallback_DoSomething(object stateInfo)
    {
        // do something
    }
}

5 个答案:

答案 0 :(得分:3)

这个帖子中有一些很好的建议。

Detecting and restarting my crashed .NET application

例如,您可以注册Application.ThreadException事件,然后使用应用程序恢复API(需要P / Invoke)处理应用程序重新启动。

http://community.bartdesmet.net/blogs/bart/archive/2006/11/11/Windows-Vista-Application-Recovery-with-C_2300_.aspx

[MSDN] Understanding Application Recovery and Restart

答案 1 :(得分:2)

答案 2 :(得分:1)

是否可以通过简单的try / catch在同一个应用程序中执行此操作取决于抛出的异常类型。我将采取最糟糕的情况,并说应用程序无法恢复。

让第二个应用程序在停止时重新启动第一个应用程序。粗略的代码:

Process p = new Process();
p.Exited += StartItAgain;
// other setup
p.Start();

答案 3 :(得分:1)

如果您不知道是什么导致该应用程序粉碎,这意味着您无法处理异常,您可能需要一个Windows服务来重新锁定您的应用程序。

答案 4 :(得分:1)

我同意.Net中的Pantelis您可能需要处理异常,如果您不知道从哪里出现错误,则必须使用UnhandledException来处理问题。

我不认为重新启动应用程序会解决您的问题它会隐藏您的问题,但如果您愿意这样做有很多方法可以做到这一点:

  • 在尝试中再次启动该过程。
  • 在UnhandledException中启动应用程序。
  • 异常和应用程序存在时的错误代码事件检查错误代码,如果错误代码不为0,则重新启动应用程序。
相关问题