2012-07-30 32 views
1

進出口使用在一定條件下混合4 在WPF應用程序工作負載之前,我需要重新啓動應用程序。重新啓動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(); 
} 

編輯:

更改設置時,我需要重新啓動以應用更改應用程序,我會用閃這個存在的情況下屏幕說(應用新設置,請等待),這將顯示,直到新的進程中加載​​

回答

1

關於什麼:通過舊進程ID作爲啓動參數,以新的實例,讓新的實例殺老時,它的加載。

使用Process.GetCurrentProcess方法來讀取舊的實例PID。將參數傳遞給ProcessStartInfo中使用Arguments屬性的新實例。然後在新實例中使用Process.GetProcessById在傳遞參數時獲取並終止舊實例。

+1

大非常感謝的作品。 – 2012-07-30 12:21:22

0

在新創建的進程直接讓WaitForInputIdle

Process p = Process.Start(...); 
p.WaitForInputIdle(); 
Application.Current.MainWindow.Close(); // perhaps better than Shutdown 
-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(); 
     } 
    } 
} 
+0

謝謝克萊門斯..我明白,我是voilating單- 條目,單出口規則。 – Nidhi 2012-07-31 07:38:52

相關問題