C# 异步控制台输出到文本块

C# 异步控制台输出到文本块,c#,wpf,C#,Wpf,我想用一些参数执行一个可执行文件 我想让我的WPF应用程序输出控制台行,并在文本块中异步显示它 这就是我到目前为止所做的: System.Threading.Thread.Sleep(5000); System.Diagnostics.Process runantc = new System.Diagnostics.Process(); runantc.StartInfo.FileName = "CMD.EXE"; runantc.StartInfo.Arguments = "/C " + An

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

我想让我的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进行了修改

我很难理解他们的代码,因为他们需要添加字符串或某种类型的代码。我是事件处理和类似过程的初学者。请帮助我,我所需要的只是将这些行异步输出到一个textblock

例如,控制台将输出:

running test...
我应该在textblock中看到:

running test...
几秒钟后,另一行出现:

running test...
this is a new line 1
几秒钟后,上述内容也应出现在文本块中:

running test...
this is a new line 1

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

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

以下代码应满足您的要求:

private static void runantc_OutputDataReceived (object sendingProcess, DataReceivedEventArgs outLine)
{
    YourControl.Dispatcher.BeginInvoke(new Action(() => { YourControl.Text += outLine.Data; }), null);
}
编辑:好的,看来我必须解释一下代码:

Dispatcher.BeginInvoke函数需要一个委托作为回调和一个参数数组

  • 调度程序。开始启动
  • 委托(BeginInvoke的第一个参数)
  • 行动(代表)
  • Lambda表达式(f.e.()=>{…}执行{…}中的代码)
  • 参数关键字

以下代码应满足您的要求:

private static void runantc_OutputDataReceived (object sendingProcess, DataReceivedEventArgs outLine)
{
    YourControl.Dispatcher.BeginInvoke(new Action(() => { YourControl.Text += outLine.Data; }), null);
}
编辑:好的,看来我必须解释一下代码:

Dispatcher.BeginInvoke函数需要一个委托作为回调和一个参数数组

  • 调度程序。开始启动
  • 委托(BeginInvoke的第一个参数)
  • 行动(代表)
  • Lambda表达式(f.e.()=>{…}执行{…}中的代码)
  • 参数关键字

再试一次。下次我应该在vs中测试这个。。。新操作(..)缺少结束(..)请重试。下次我应该在vs中测试这个。。。新操作(..)缺少结束)