问题描述
我有一个 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
}