重新启动WPF应用程序:等待直到加载新进程,然后退出当前进程

时间:2012-07-30 10:41:55

标签: c# wpf restart

我正在使用混合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();
}

编辑:

当设置发生变化时,我需要重新启动应用程序以应用更改,我会使用启动画面说(应用新设置,请等待),这将显示,直到加载新进程

3 个答案:

答案 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();
        }
    } 
}