C# 异步控制台输出到文本块
我想用一些参数执行一个可执行文件 我想让我的WPF应用程序输出控制台行,并在文本块中异步显示它 这就是我到目前为止所做的: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
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.()=>{…}执行{…}中的代码)
- 参数关键字