Application.Restart()在C#中使用该方法应该重新启动当前的应用程序:但似乎这并不总是有效.
这个问题是否有原因,有人可以告诉我,为什么它不能一直工作?
cpr*_*ack 18
在我的情况下(没有单一实例),在哪里
Application.Restart();
Run Code Online (Sandbox Code Playgroud)
不起作用,
System.Diagnostics.Process.Start(Application.ExecutablePath);
Application.Exit();
Run Code Online (Sandbox Code Playgroud)
做了这个工作!
我遇到这种问题的唯一一次是在我的主要表单中,我有一个自定义FormClosing事件处理程序,它执行逻辑并取消了事件.
我现在遇到另一个实例,根据您的意见,它可能反映了您的体验.
当使用Mutex运行单个实例应用程序时,我Application.Restart()从一个相当嵌入的位置进行调用,该位置需要进行大量清理.所以似乎重启是在前一个实例完成之前启动一个新实例,因此Mutex保持新实例的启动.
小智 6
在我的程序中,我有一个互斥锁,以确保只有一个应用程序实例在计算机上运行.这导致新启动的应用程序无法启动,因为互斥锁未及时释放.结果我输入一个值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();
}
Run Code Online (Sandbox Code Playgroud)
在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
而已.