我试图重复地从CMD进程中读取,并重复打印输出,但是我正在使用的while循环在一个Task.Run中,这样它就不会锁定程序,但是ASync和非异步方法有一些问题,我不太理解。我知道我不需要在Task.Run中包含pProcess.StandardOutput.ReadToEnd,但是我如何在我的代码中实现它呢?谢谢!
Task.Run(() =>
{
while (true)
{
string output = pProcess.StandardOutput.ReadToEnd();
System.Console.Write(output);
}
});

发布于 2016-04-08 05:44:59
您可以尝试下面的代码片段吗?OutputDataReceived是异步读取进程输出的方法。
var startInfo = new ProcessStartInfo {
FileName = <Your Application>,
UseShellExecute = false, // Required to use RedirectStandardOutput
RedirectStandardOutput = true, //Required to be able to read StandardOutput
Arguments = <Args> // Skip this if you don't use Arguments
};
using(var process = new Process { StartInfo = startInfo })
{
process.Start();
process.OutputDataReceived += (sender, line) =>
{
if (line.Data != null)
Console.WriteLine(line.Data);
};
process.BeginOutputReadLine();
process.WaitForExit();
}发布于 2016-04-08 05:49:52
假设pProcess是Process的一个实例,pProcess.StandardOutput是异步的,但由于.readToEnd()方法,它会一直读到最后。
我认为您不需要Task.Run或while循环。请查看https://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline%28v=vs.110%29.aspx上的示例
发布于 2016-04-08 05:50:20
使用Task.Run在单独的任务中执行这段代码是没有问题的,我认为你之前在代码中的某个地方调用了像BeginErrorReadLine或BeginOutputReadLine这样的异步方法。这个答案可能会有帮助:I am trying to read the output of a process in c# but I get this message "Cannot mix synchronous and asynchronous operation on process stream."
https://stackoverflow.com/questions/36487532
复制相似问题