Application.Restart使进程挂起

时间:2015-04-07 11:15:08

标签: c# .net

当达到某个条件时,我的应用程序运行Application.Restart以重新启动应用程序。这会使进程挂起,以便在应用程序恢复时它会抱怨它已在运行(我有代码检查是否只允许应用程序的一个实例)。

可以通过调用Environment.Exit来消除此过程,但这与Application.Restart冲突。 当调用Restart,然后调用Environment.Exit时,重启将中止,应用程序退出而不尝试重新启动。

我怎样才能解决这个问题?

更多信息:

我的主类实例化一个子类。如果满足某些条件,则此子类调用Application.Restart。 这会导致.Net在主类上调用FormClosed事件。此事件调用Environment.Exit以确保在用户退出应用程序时关闭所有进程,从而导致重新启动中止。

2 个答案:

答案 0 :(得分:1)

猜测代码中的某些内容会阻止您的应用程序在重新启动之前正常关闭,因此请务必检查您的代码(即FormClosed)。尝试使用可执行路径启动新进程,然后关闭原始进程。

System.Diagnostics.Process.Start(Application.ExecutablePath);
Application.Exit();

希望它有帮助..!

编辑:

  

Why is Application.Restart() not reliable?

这应该有帮助,所以可能重复!

答案 1 :(得分:1)

Environment.Exit(0)是kernel32.dll中ExitProcess(0)的等效API。它立即终止该过程。 Application.Exit都可以在主线程处理时挂起。

对于您的情况,我建议使用Environment.Exit并在此之前启动一个新实例:

Application.Restart

肯定会退出您的应用程序。