异步控制台输出到文本块
本文关键字:文本 输出 异步控制 控制台 异步 | 更新日期: 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
属性从输出文本中获取详细信息。