ProcessStartInfo 和事件/异步与参数

问题描述

我有一个 href 列表,我运行了它在此位置 (svn) 上异步查找的命令。 在 ProcessOnErrorDataReceived 中,我必须将 s + outLine 添加到列表中。我不知道该怎么做。可以将 s 发送到事件,或者我需要同步调用一个方法

Search(List<string> path) {
 foreach(var s in path){
   ...
   if (process.StartInfo.RedirectStandardOutput)
                process.OutputDataReceived += ProcessOnErrorDataReceived;
    }
  }

  private void ProcessOnErrorDataReceived(object sendingProcess,DataReceivedEventArgs outLine)
    {
        Process p = sendingProcess as Process;
        if (outLine.Data != null)
            list.Add(outLine.Data);  //Here +s
    }

解决方法

尝试这样的事情。 这里我们创建一个闭包并捕获 locS 值。因此,当偶数发生时,我们可以将捕获的值传递给 ProcessOnErrorDataReceived

Search(List<string> path)
{
  foreach(var s in path)
  {
    ...
    if (process.StartInfo.RedirectStandardOutput)
    {
      var locS = s;
      process.OutputDataReceived += (sender,e) =>
         ProcessOnErrorDataReceived(sender,e,locS);
    }
  }
}

private void ProcessOnErrorDataReceived(object sendingProcess,DataReceivedEventArgs outLine,string s)
{
  Process p = sendingProcess as Process;
  if (outLine.Data != null)
      list.Add(outLine.Data + s);  //Here +s
}