我正在使用混合4处理wpf应用程序。 在某些情况下,我需要重新启动应用程序。
我目前正在使用以下代码:
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
System.Threading.Thread.Sleep(1000);
Application.Current.Shutdown();
有效。
我的问题是当前实例在加载新实例之前关闭,使其看起来像程序崩溃。我使用thread.sleep来停止shutdoen,但时间不同。
有没有办法在关闭当前的进程之前等待新进程启动?
类似于:
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
if (newProcess.IsLoaded == true)
{
Application.Current.Shutdown();
}
编辑:
当设置发生变化时,我需要重新启动应用程序以应用更改,我会使用启动画面说(应用新设置,请等待),这将显示,直到加载新进程
答案 0 :(得分:1)
怎么样:将旧进程id作为启动参数传递给新实例,并让新实例在加载时杀死旧实例。
使用Process.GetCurrentProcess
方法读取旧实例pid。使用Arguments
中的ProcessStartInfo
属性将参数传递给新实例。然后在新实例中使用Process.GetProcessById
来获取并在传递参数时终止旧实例。
答案 1 :(得分:0)
只需在新创建的流程上调用WaitForInputIdle:
Process p = Process.Start(...);
p.WaitForInputIdle();
Application.Current.MainWindow.Close(); // perhaps better than Shutdown
答案 2 :(得分:-1)
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Process[] myProcess = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
foreach (Process process in myProcess)
{
if (process.Id != Process.GetCurrentProcess().Id)
{
process.Kill();
}
}
}