在流程关闭时执行操作

本文关键字:执行 操作 程关闭 | 更新日期: 2023-09-27 18:16:11

首先,我在Windows窗体应用程序中编程。
正如标题所描述的,我想执行一个操作时,我启动的进程,将关闭。

我已经试过了:

Process s = new Process();  
s.EnableRaisingEvents = true;  
s = Process.Start(processToStart);  
s.Exited += s_Exited;

当我这样做的时候:

Process s = new Process();  
s = Process.Start(processToStart);  
s.EnableRaisingEvents = true;  
s.Exited += s_Exited;

I get exception of System.InvalidOperationException.

完整的异常细节:

附加信息:跨线程操作无效:控制'Main'从创建它的线程以外的线程访问。

在流程关闭时执行操作

您的原始代码有两个问题

1-您在 s = Process.Start(processToStart); 处为s分配一个新进程,因此您松开 s.EnableRaisingEvents = true;

2- Exited事件是从不同于UI线程的线程调用的。因此你应该使用Invoke来避免跨线程异常

Process p = new Process();
p.EnableRaisingEvents = true;
p.StartInfo = new ProcessStartInfo() { FileName = processToStart };
p.Exited += (s, e) =>
{
    this.Invoke((Action)(() =>
    {
        //your code accesing UI, for ex, 
        this.Text = "Exited";
    }));
};
p.Start();

PS:当前代码在进程启动后附加到 exit 事件。在您附加到事件之前,可能会出现(低概率)进程退出的情况。