我正在开发一个Windows Forms应用程序,该应用程序要求我调用一个单独的程序来执行任务。该程序是一个控制台应用程序,我需要将标准输出从控制台重定向到程序中的TextBox。

从我的应用程序执行程序没有问题,但是我不知道如何将输出重定向到我的应用程序。我需要在使用事件运行程序时捕获输出。

在我的应用程序停止并且文本以随机间隔不断变化之前,控制台程序并不打算停止运行。我要尝试做的只是从控制台挂接输出以触发事件处理程序,然后可以使用该事件处理程序来更新TextBox。

我正在使用C#编写程序代码,并使用.NET框架进行开发。原始应用程序不是.NET程序。

编辑:
这是我正在尝试执行的示例代码。在我的最终应用程序中,我将用代码替换Console.WriteLine来更新TextBox。我试图在事件处理程序中设置一个断点,但是甚至没有达到。

    void Method()
    {
        var p = new Process();
        var path = @"C:\ConsoleApp.exe";

        p.StartInfo.FileName = path;
        p.StartInfo.UseShellExecute = false;
        p.OutputDataReceived += p_OutputDataReceived;

        p.Start();
    }

    static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine(">>> {0}", e.Data);
    }

最佳答案

这对我有用:

void RunWithRedirect(string cmdPath)
{
    var proc = new Process();
    proc.StartInfo.FileName = cmdPath;

    // set up output redirection
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.RedirectStandardError = true;
    proc.EnableRaisingEvents = true;
    proc.StartInfo.CreateNoWindow = true;
    // see below for output handler
    proc.ErrorDataReceived += proc_DataReceived;
    proc.OutputDataReceived += proc_DataReceived;

    proc.Start();

    proc.BeginErrorReadLine();
    proc.BeginOutputReadLine();

    proc.WaitForExit();
}

void proc_DataReceived(object sender, DataReceivedEventArgs e)
{
    // output will be in string e.Data
}

关于c# - 将控制台输出重定向到单独程序中的文本框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/415620/

10-10 13:50
查看更多