1

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

编辑:

这是在更改设置时的上下文,我需要重新启动应用程序以应用更改,并且我会使用启动屏幕说(应用新设置请稍候),这将显示直到加载新进程

4

3 回答 3

2

那怎么样:将旧进程ID作为启动参数传递给新实例,并让新实例在加载时杀死旧实例。

使用Process.GetCurrentProcess方法读取旧实例 pid。Arguments使用 中的属性将参数传递给新实例ProcessStartInfo。然后Process.GetProcessById在传递参数时在新实例中使用来获取和杀死旧实例。

于 2012-07-30T10:45:38.507 回答
0

只需在新创建的进程上调用WaitForInputIdle :

Process p = Process.Start(...);
p.WaitForInputIdle();
Application.Current.MainWindow.Close(); // perhaps better than Shutdown
于 2012-07-30T11:08:43.623 回答
-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();
        }
    } 
}
于 2012-07-30T11:17:55.610 回答