我正在测试以下内容,并试图了解它的作用,然后将其应用于我的实时应用程序。该应用似乎可以使用.SynchronizingObject = this;或不使用ojit_code。我看过MSDN,但可以用另一种方式解释此行的作用以及为什么需要包含它?

private void btRunProcessAndRefresh_Click_1(object sender, EventArgs e) {
    //instantiate a new process and tell it where to find file
    myProcess =new Process();
    myProcess.StartInfo.FileName =@"notepad.exe";

    //creates an action to execute when the event exits
    myProcess.Exited +=new EventHandler(MyProcessExited);
    myProcess.EnableRaisingEvents =true;

    //myProcess.SynchronizingObject =this;
    elapsedTime = 0;
    myProcess.Start();

    myTimer =new System.Windows.Forms.Timer();
    myTimer.Tick +=new EventHandler(TimerTickEvent);
    myTimer.Interval = SLEEP_AMOUNT;
    myTimer.Start();
}

private void MyProcessExited(Object source,EventArgs e) {
    myTimer.Stop();
}

private void TimerTickEvent(Object myObject,EventArgs myEventArgs) {
    myTimer.Stop();
    elapsedTime += SLEEP_AMOUNT;
    if (elapsedTime > MAXIMUM_EXECUTION_TIME)
        myProcess.Kill();
    else
        myTimer.Start();
}

最佳答案

参见MSDN



如果您在控制台应用程序中执行代码序列,则可能不需要设置SynchronizingObject。但是如果要从Exited事件处理程序访问UI,则必须设置此成员。

10-08 14:32