如何重新启动WPF应用程序?
我怎样才能重新启动一个WPF应用程序? 在我使用的Windows窗体
System.Windows.Forms.Application.Restart();
如何在WPF中做到这一点?
我发现这一点:它的作品。 但。 有没有更好的办法?
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); Application.Current.Shutdown();
我已经在WPF中成功地使用了这个:
System.Windows.Forms.Application.Restart(); System.Windows.Application.Current.Shutdown();
Application.Restart();
要么
System.Diagnostics.Process.Start(Application.ExecutablePath); Application.Exit();
在我的程序中,我有一个互斥锁来确保只有一个应用程序在计算机上运行。 这导致新启动的应用程序无法启动,因为互斥体没有及时释放。 因此,我将一个值放入Properties.Settings,指示应用程序正在重新启动。 在调用Application.Restart()之前,将Properties.Settings值设置为true。 在Program.Main()我也添加了一个特定的property.settings值的检查,以便当它真正重置为false,并有一个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(); } }
而已。
Application.Current.Shutdown(); System.Windows.Forms.Application.Restart();
在这个顺序为我工作,反过来刚刚开始另一个应用程序的实例。
这些build议的解决scheme可能会起作用,但正如另一位评论者所提到的那样,他们觉得有点像一个黑客。 另一种做这种感觉稍微清洁的方法是运行一个包含延迟(例如5秒)的batch file,以等待当前(closures)应用程序终止。
这可以防止两个应用程序实例同时打开。 在我的情况下,它是无效的两个应用程序实例同时打开 – 我正在使用一个互斥体,以确保只有一个应用程序打开 – 由于应用程序使用一些硬件资源。
Windowsbatch file示例(“restart.bat”):
sleep 5 start "" "C:\Dev\MyApplication.exe"
而在WPF应用程序中,添加以下代码:
// Launch the restart batch file Process.Start(@"C:\Dev\restart.bat"); // Close the current application Application.Current.MainWindow.Close();
延迟1秒后,通过命令行运行程序的新实例。 在延迟电stream实例关机期间。
ProcessStartInfo Info = new ProcessStartInfo(); Info.Arguments = "/C choice /CY /N /DY /T 1 & START \"\" \"" + Assembly.GetExecutingAssembly().Location + "\""; Info.WindowStyle = ProcessWindowStyle.Hidden; Info.CreateNoWindow = true; Info.FileName = "cmd.exe"; Process.Start(Info); Application.Current.Shutdown();
Application.Restart(); Process.GetCurrentProcess().Kill();
像我的魅力一样工作