【发布时间】:2014-10-23 12:59:57
【问题描述】:
我一直在尝试从以下获取控制台输出
private void List_Adapter()
{
using (Process tshark = new Process())
{
tshark.StartInfo.FileName = ConfigurationManager.AppSettings["fileLocation"];
tshark.StartInfo.Arguments = "-D";
tshark.StartInfo.CreateNoWindow = true;
tshark.StartInfo.UseShellExecute = false;
tshark.StartInfo.RedirectStandardOutput = true;
tshark.OutputDataReceived += new DataReceivedEventHandler(TSharkOutputHandler);
tshark.Start();
tshark.BeginOutputReadLine();
tshark.WaitForExit();
}
}
void TSharkOutputHandler(object sender, DataReceivedEventArgs e)
{
this.Dispatcher.Invoke((Action)(() =>
{
tboxConsoleOutput.AppendText(e.Data);
}));
}
但是 ui 只是冻结,没有显示任何信息我只是错误地接近这个
我找到了以下内容,但没有成功
No access different thread
Object different thread
Redirect Output to Textbox
Output to Textbox
Process output to richtextbox
【问题讨论】:
-
您的 UI 由于以下语句而冻结:
tshark.WaitForExit();您正在阻塞 UI 线程,而进程正在运行。事实上,根据进程的输出量,您最终可能会阻止进程继续进行,因为您在Invoke()方法调用上陷入僵局。不可能提供一个好的答案,因为您的问题没有足够的上下文。但这将涉及不调用WaitForExit()(并且在你完成之前不释放Process对象)。
标签: c# string multithreading console