将进程的标准输出打印到文本框WHILE进程正在运行?

时间:2014-08-11 18:19:00

标签: c# python user-interface output

我有一个C#GUI,我运行python脚本需要大约2分钟。我不想将Python脚本的输出定向到文件,而是希望GUI显示Python脚本在文本框中所做的所有打印输出,因为进程正在运行。我发现的任何解决方案通常都会在将标准输出重定向到文本框之前等待处理结束,并且我不确定我是否正确搜索解决方案。有没有人知道如何做到这一点?这里有一些代码供参考:

using (Process proc = new Process())
{

    debug_output.AppendText("All debug output will be listed below\n");
    string pyFileName = "hello.py";
    string args = "arg1";
    proc.StartInfo.FileName = "C:\\Python27\\python.exe";
    proc.StartInfo.Arguments = string.Format("{0} {1}", pyFileName, args);
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.OutputDataReceived += new DataReceivedEventHandler(MyProcOutputHandler);
    proc.Start();

    proc.BeginOutputReadLine();
    while (!proc.HasExited)
    {
        Application.DoEvents();
    }
}

使用以下处理程序:

private void MyProcOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
    if (!String.IsNullOrEmpty(outLine.Data))
    {
        if (debug_output.InvokeRequired)
        {
            debug_output.BeginInvoke(new DataReceivedEventHandler(MyProcOutputHandler), new[] { sendingProcess, outLine });
        }
        else
        {
            debug_output.AppendText(outLine.Data);
            debug_output.AppendText("\n");
        }       
    }
    Console.WriteLine(outLine.Data);
}

作为更新,我尝试了来自this post的解决方案,因为它看起来像是完全相同的问题,但我仍然没有让它工作。我的输出最终在正确的位置,但只有在整个脚本完成运行之后。请帮忙。

0 个答案:

没有答案