C# 使用流程标准输出不断更新表单

C# 使用流程标准输出不断更新表单,c#,forms,process,C#,Forms,Process,我有一个C#表单,它有一个文本框,需要在exe仍在运行时不断更新exe的输出。我知道如何在exe完成后更新它,但这是我需要的持续更新。您有启动exe的流程: // Normal creation and initialization of process - additionally: process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Output

我有一个C#表单,它有一个文本框,需要在exe仍在运行时不断更新exe的输出。我知道如何在exe完成后更新它,但这是我需要的持续更新。

您有启动exe的流程:

// Normal creation and initialization of process - additionally:
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += ProcessOnOutputDataReceived;
process.Start();
process.BeginOutputReadLine();
和处理程序:

private void ProcessOnOutputDataReceived( object sender, DataReceivedEventArgs args )
{
    // use args.Data
}
编辑:
我忘记了
process.StartInfo.UseShellExecute=false:/

编辑:

事实证明,exe没有刷新输出(请参见注释)

您有启动exe的进程:

// Normal creation and initialization of process - additionally:
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += ProcessOnOutputDataReceived;
process.Start();
process.BeginOutputReadLine();
和处理程序:

private void ProcessOnOutputDataReceived( object sender, DataReceivedEventArgs args )
{
    // use args.Data
}
编辑:
我忘记了
process.StartInfo.UseShellExecute=false:/

编辑:

事实证明,exe没有刷新输出(请参见注释)

实现这一点的一种方法是使用远程处理-换句话说,您将轮询正在运行的可执行文件中的一个已知方法,以检索值并基于此更新文本框中的值。一些示例的Google.net远程处理


或者(如果您使用的是.NET3和on),您可以使用WCF和类似Tcp或对等2的绑定。在不了解您的体系结构的情况下,我对此没有什么可说的。

实现这一点的一种方法是使用远程处理-换句话说,您将轮询运行的可执行文件中的一个已知方法,以检索值并基于此更新文本框中的值。一些示例的Google.net远程处理


或者(如果您使用的是.NET3和on),您可以使用WCF和类似Tcp或对等2的绑定。在不了解您的体系结构的情况下,关于这一点,我没有什么可说的了。

当您说exe时,您是说使用process start运行控制台应用程序吗

如果是这样,那么您必须获得console应用程序的输出,请参见此

这是发送输入,这里有一个读取输出的示例


另一个选项是让调用类连接到windows窗体中的事件。它将调用事件将导致表单更新文本框。

当您说exe时,您是说使用process start运行控制台应用程序吗

如果是这样,那么您必须获得console应用程序的输出,请参见此

这是发送输入,这里有一个读取输出的示例


另一个选项是让调用类连接到windows窗体中的事件。它将调用事件将导致表单更新文本框。

是否使用System.Diagnostics.Process运行Exe?是的,我只是想从Exe的输出中不断更新,但我尝试的一切似乎都必须等待Exe结束。是否使用System.Diagnostics.Process运行Exe?是的,我只是想从exe的输出中不断更新,但我尝试的一切似乎都必须等待exe结束。这似乎仍然要等待exe完成,然后才能调用事件。当我强制exe停止时,我只在事件中点击断点,然后随着输出一次又一次地调用事件。关于如何改进这一点有什么想法吗?您必须将process.StartInfo.UseShellExecute=false;这是什么?您可以更改代码吗?尝试刷新其输出。这似乎仍然要等待exe完成,然后才能调用事件。当我强制exe停止时,我只在事件中点击断点,然后随着输出一次又一次地调用事件。关于如何改进这一点有什么想法吗?您必须将process.StartInfo.UseShellExecute=false;这是什么?你能改变代码吗?试着刷新它的输出。