我正在调用一个外部命令行应用程序,它不断地将信息吐出到控制台窗口中。我想阅读这些信息并将其传递给我的代码以报告进度。
但是......我从来没有得到任何价值。如果我使用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();
}
答案 0 :(得分:1)
我每隔几天就会一次又一次地问这个问题......请看我的回答:
答案 1 :(得分:1)
我认为线程是在进程之前启动的,不知何故你是死锁。查看http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx