我一直在尝试从以下内容中获取控制台输出
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);
}));
}
但是用户界面被冻结了,没有显示任何信息,我是否处理不当?
我已经找到以下内容并尝试过,但没有成功: 无法访问不同的线程
不同线程的对象
将输出重定向到文本框
输出到文本框
将进程输出到 RichTextBox
tshark.WaitForExit();
。您正在阻塞UI线程,以使进程运行。实际上,取决于该过程产生了多少输出,您最终可能会阻止该进程继续运行,因为您在Invoke()
方法调用上死锁了。无法提供好的答案,因为问题中没有足够的上下文。但它将涉及不调用WaitForExit()
(并且在完成操作后不释放Process
对象)。 - Peter Duniho