2016-08-01 78 views
1

當前有一個程序可以打開另一個程序。如果程序關閉,我需要執行一個操作。我對C#很新,所以可以使用一些幫助讓我指出正確的方向。如何監視其他.exe文件並在其關閉時執行操作

編輯:所以我能夠得到當前窗體打開外部程序。這個表單然後需要關閉,另一個表單需要有一個函數來執行一個動作,如果loader.exe關閉。這是我的第一種形式。如何編寫其他表單以瞭解此程序是否已結束。

public static class Program 
{ 
    public static bool OpenManager { get; set; } 
    public static int DeskNumber { get; set; } 

    /// The main entry point for the application. 

    [STAThread] 
    static void Main(string[] arguments) 
    { 
     /// Do not move this! 
     OpenManager = false; 
     MYvariable = 0; 
     /// ---------------- 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Loader()); 

     if (OpenManager) 
     { 
      if (MYvariable == 1) 
      { 
       System.Diagnostics.Process startProgram = System.Diagnostics.Process.Start("loader.exe", "-r 52"); 
       startProgram.EnableRaisingEvents = true; 
       Application.Run(new Manager()); 

回答

2

假設你使用Process class啓動其他程序,您可以訂閱Exited事件Process實例:

Process myProcess = Process.Start("myprogram.exe", "arguments"); 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += (sender, e) => 
    { 
     // Do what you want to do when the process exited. 
    } 

或者,要做到這一點更加明確,宣佈一個明確的事件處理程序當進程結束時調用:

public void OnProcessExited(object sender, EventArgs e) 
{ 
    // Do what you want to do when the process exited. 
} 

public void StartProcess() 
{ 
    Process myProcess = Process.Start("myprogram.exe", "arguments"); 
    myProcess.EnableRaisingEvents = true; 
    myProcess.Exited += OnProcessExited; 
} 
+0

這是否允許初始過程仍然運行並執行其他操作?對不起,如果這是一個真正新問題。 –

+0

@DavidBentley當然可以。你只註冊該事件。所以如果創建的進程終止了'OnProcessExited'被調用。 (注意,我不確定是否在啓動該進程的同一個線程上調用這個函數)。但是,在進程運行時,執行不會被阻止。 –

+0

好的,如果我以一種形式打開外部程序,然後該表單關閉並打開另一個表單,這也可以工作嗎?新形式是監控運行過程所需要的。 –

0

如果您在c#中使用Process類打開並保留在打開的程序上您可以處理其退出的事件的軌道,如下所示:

App.Exited += AppOnExited; 

private static void AppOnExited(object sender, EventArgs eventArgs) 
{ 
    // Do your action here 
} 

應用程序是您的過程對象的名稱。

不要忘記,你可能需要刪除的處理程序,當你做了,像這樣:

App.Exited -= AppOnExited; 
0

如果應用程序返回int代碼,你可以使用:

Process P = Process.Start("App.exe"); 
P.WaitForExit(); 
int code = P.ExitCode; 

return的應用程序:

public static int Main(string[] args) 
{ 
    return (int); 
} 

將設置P.ExitCode關閉時返回值。

相關問題