2016-08-01 52 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关闭时返回值。

相关问题