进程关闭时执行操作

时间:2014-08-04 11:19:27

标签: c# invalidoperationexception

首先,我正在使用Windows Forms Application进行编程 正如标题所描述的那样,我想在我开始的过程中执行一个动作,然后关闭。

我最初尝试过:

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;

我得到System.InvalidOperationException的例外。

完整的异常详情:

  

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

1 个答案:

答案 0 :(得分:1)

原始代码存在两个问题

1 - 您在{em> ss = Process.Start(processToStart);分配了一个新流程,因此您将失去 s.EnableRaisingEvents = true;

2 - 从与您的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: 您的当前代码会在进程启动后附加到已退出事件。它可能发生(概率很低),该过程在您附加到事件之前退出。上面的代码是更正确的doint方式。