异步控制台输出到文本块

本文关键字:文本 输出 异步控制 控制台 异步 | 更新日期: 2023-09-27 17:59:29

我想用一些参数执行一个可执行文件。

我希望我的WPF应用程序输出控制台行,并在文本块中异步显示它。

这就是我迄今为止所做的:

System.Threading.Thread.Sleep(5000);
System.Diagnostics.Process runantc = new System.Diagnostics.Process();
runantc.StartInfo.FileName = "CMD.EXE";
runantc.StartInfo.Arguments = "/C " + Antcbatchpath;
runantc.StartInfo.UseShellExecute = false;
runantc.StartInfo.RedirectStandardOutput = true;
runantc.StartInfo.RedirectStandardError = true;
runantc.OutputDataReceived +=new DataReceivedEventHandler(runantc_OutputDataReceived);
runantc.Start();
runantc.BeginOutputReadLine();
runantc.Close(); 
private static void runantc_OutputDataReceived (object sendingProcess, 
DataReceivedEventArgs outLine)
{
 //i am not sure what should be here
}

以上代码根据msdn的网页进行了更改

我在执行他们的代码时遇到了很多麻烦,因为他们需要添加字符串或某种类型的代码。我是事件处理和此类过程的初学者。请帮帮我,我所需要的只是将这些行异步输出到一个文本块。

例如,控制台将输出:

running test...

我应该在文本块中看到:

running test...

几秒钟后,另一行出现:

running test...
this is a new line 1

并且上面的内容也应该在几秒钟后出现在文本块中:

running test...
this is a new line 1

异步控制台输出到文本块

以下代码应该可以执行您想要的操作:

private static void runantc_OutputDataReceived (object sendingProcess, DataReceivedEventArgs outLine)
{
    YourControl.Dispatcher.BeginInvoke(new Action(() => { YourControl.Text += outLine.Data; }), null);
}

编辑:好的,看来我必须稍微解释一下代码:

调度员。BeginInvoke函数需要一个委托作为回调和一个参数数组。

  • 调度员。开始调用http://msdn.microsoft.com/en-us/library/cc190824.aspx
  • Delegate(BeginInvoke的第一个参数)http://msdn.microsoft.com/en-us/library/system.delegate.aspx
  • 行动(代表)http://msdn.microsoft.com/en-us/library/system.action.aspx
  • Lambda表达式(f.e.()=>{…}执行{…}中的代码)http://msdn.microsoft.com/en-us/library/bb397687.aspx
  • params关键字http://msdn.microsoft.com/en-us/library/w5zay9db%28v=VS.100%29.aspx

我不确定它是否会如您所期望的那样出现,但您可以使用DataReceivedEventArgs.Data属性从输出文本中获取详细信息。