Application.Restart()
在C#中使用该方法应该重新启动当前的应用程序:但似乎这并不总是有效.
这个问题是否有原因,有人可以告诉我,为什么它不能一直工作?
可能有很多原因.这不是方法不起作用; 相反,很多时候程序员忘记了他们在代码中放了一些东西会阻止应用程序自动关闭或启动.两个例子:
表单上的Closing事件可以阻止应用程序关闭
如果您正在检查已经运行的进程,那么旧进程可能无法快速关闭以允许新进程启动.
检查你的代码是否有类似的问题.如果您在空白应用程序中看到此行为,那么实际功能可能比您的代码更容易出现问题.
检查Microsoft的应用程序重启源代码.
在我的情况下(没有单一实例),在哪里
Application.Restart();
不起作用,
System.Diagnostics.Process.Start(Application.ExecutablePath); Application.Exit();
做了这个工作!
我遇到这种问题的唯一一次是在我的主要表单中,我有一个自定义FormClosing
事件处理程序,它执行逻辑并取消了事件.
我现在遇到另一个实例,根据您的意见,它可能反映了您的体验.
当使用Mutex运行单个实例应用程序时,我Application.Restart()
从一个相当嵌入的位置进行调用,该位置需要进行大量清理.所以似乎重启是在前一个实例完成之前启动一个新实例,因此Mutex保持新实例的启动.
在我的程序中,我有一个互斥锁,以确保只有一个应用程序实例在计算机上运行.这导致新启动的应用程序无法启动,因为互斥锁未及时释放.结果我输入一个值Properties.Settings
表示应用程序正在重新启动.在调用之前,Application.Restart()
该Properties.Settings
值设置为true.在Program.Main()
我还添加了特定的检查property.settings
值,这样,当真正被重置为假,有一个Thread.Sleep(3000);
在你的程序中,你可能有逻辑:
if (ShouldRestartApp) { Properties.Settings.Default.IsRestarting = true; Properties.Settings.Default.Save(); Application.Restart(); }
在 Program.Main()
[STAThread] static void Main() { Mutex runOnce = null; if (Properties.Settings.Default.IsRestarting) { Properties.Settings.Default.IsRestarting = false; Properties.Settings.Default.Save(); Thread.Sleep(3000); } try { runOnce = new Mutex(true, "SOME_MUTEX_NAME"); if (runOnce.WaitOne(TimeSpan.Zero)) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } finally { if (null != runOnce) runOnce.Close(); } }
而已.