我有一个小型,长期运行的嵌入式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
}
}
答案 0 :(得分:3)
这个帖子中有一些很好的建议。
Detecting and restarting my crashed .NET application
例如,您可以注册Application.ThreadException
事件,然后使用应用程序恢复API(需要P / Invoke)处理应用程序重新启动。
答案 1 :(得分:2)
创建Windows服务:http://visualstudiomagazine.com/articles/2013/10/01/easily-create-windows-services-with-topshelf.aspx
并将其设置为在失败时重启:How can a windows service programmatically restart itself?
答案 2 :(得分:1)
是否可以通过简单的try / catch在同一个应用程序中执行此操作取决于抛出的异常类型。我将采取最糟糕的情况,并说应用程序无法恢复。
让第二个应用程序在停止时重新启动第一个应用程序。粗略的代码:
Process p = new Process();
p.Exited += StartItAgain;
// other setup
p.Start();
答案 3 :(得分:1)
如果您不知道是什么导致该应用程序粉碎,这意味着您无法处理异常,您可能需要一个Windows服务来重新锁定您的应用程序。
答案 4 :(得分:1)
我同意.Net中的Pantelis您可能需要处理异常,如果您不知道从哪里出现错误,则必须使用UnhandledException来处理问题。
我不认为重新启动应用程序会解决您的问题它会隐藏您的问题,但如果您愿意这样做有很多方法可以做到这一点: