2012-01-15 32 views
4

我有一個WinForms應用程序。這裏是Form_Load方法的代碼。當孩子運行時從父進程退出

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe"; 
proc.StartInfo.Arguments = Application.ExecutablePath; 
proc.Start(); 

Application.Exit(); 

爲什麼我的父進程犯規關閉程序時,我打電話Application.Exit?如何發現問題?

+2

因爲Load事件運行時應用程序還沒有啓動。如果沒有什麼意義創建表單並立即想要終止應用程序。只是不要創建表單。在Program.cs中編輯您的Main()方法 – 2012-01-15 13:20:39

+0

我試圖在給出推薦之前準確理解您正在嘗試實現的內容。你有一個Windows窗體應用程序,在主窗體的加載事件中啓動另一個進程?這是父WinForms應用程序的唯一目的嗎? – 2012-01-16 01:40:39

回答

0

爲了退出Windows窗體應用程序,您應該關閉主窗體。看看Program.Main()中的代碼,你會發現主線程保持活躍的主要形式。關閉它,應用程序將退出。

+0

但是當我嘗試調用this.Close()它也不工作。 – Neir0 2012-01-15 13:18:48

+0

你確定Form_Load被調用? – 2012-01-15 13:20:11

+0

是的,Form_load被調用。和start.exe和父進程是相同的程序,但我檢查執行路徑。 – Neir0 2012-01-15 13:30:40

3

一旦你開始一個新的過程,它的生命週期是獨立於你當前的應用程序的。如果您想要一個與當前應用程序的生命週期直接相關的執行製品,請使用線程。

如果你確定你想創建一個子進程,然後終止它,你需要殺死它:

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe"; 
proc.StartInfo.Arguments = Application.ExecutablePath; 
proc.Start(); 

// When terminating: 
proc.Kill(); 
proc.WaitForExit(); 
Application.Exit(); 

不過,我不會推薦上述對於大多數情況,因爲它可以如果子進程在執行關鍵操作(如保存到文件)時被終止,則會導致數據損壞。

相關問題