阅读外部控制台应用窗口

时间:2011-02-14 11:31:26

标签: c# .net

我正在调用一个外部命令行应用程序,它不断地将信息吐出到控制台窗口中。我想阅读这些信息并将其传递给我的代码以报告进度。

但是......我从来没有得到任何价值。如果我使用sr.ReadToEnd(),它会一直停滞,直到应用程序关闭并且只返回一个空字符串。如何正确读取外部应用程序的命令行窗口中的文本?

这是我的测试代码,无需进行线程化,无论我做什么,流都会返回空白:

    private void runApp(string args, string app)
    {
        ProcessStartInfo pInfo = new ProcessStartInfo(app, args);
        pInfo.CreateNoWindow = true;
        pInfo.RedirectStandardOutput = true;
        pInfo.UseShellExecute = false;

        Thread t = new Thread(getProgress);
        t.Start();

        p = Process.Start(pInfo);
        p.WaitForExit();
        p.Close();
    }
    private void getProgress()
    {
        StreamReader sr = p.StandardOutput;

        //Get's stuck here until the app closes, nothing is ever outputted
        string output = sr.ReadLine();

        //Just for testing, debugging here
        while (true)
        {
            Console.WriteLine(output);
            System.Threading.Thread.Sleep(1000);
        }
        sr.Close();
    }

2 个答案:

答案 0 :(得分:1)

我每隔几天就会一次又一次地问这个问题......请看我的回答:

Running a c++ console app inside a C# console app

答案 1 :(得分:1)

我认为线程是在进程之前启动的,不知何故你是死锁。查看http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx