标签:
使用事件和委托,进程有2个事件OutputDataReceived、ErrorDataReceived可用于重定向标准输出和标准错误输出;
需要注意的是InputDataReceived并不是process的事件,所以标准输入并不可以如此重定向;
使用前需加上: using System.Diagnostics; //可使用process
第一步:确定必要成分
1 Process StartInfostartInfo =newProcessStartInfo(.exe); 2 startInfo.CreateNoWindow = true; //不创建窗口 3 startInfo.UseShellExecute = false; 4 //不使用系统外壳程序启动,重定向输出的话必须设为false 5 startInfo.RedirectStandardOutput = true; //重定向输出, 6 startInfo.RedirectStandardError = true;
第二步:使用try catch块
1 try 2 { 3 Processprocess = Process.Start(startInfo); 4 process.OutputDataReceived += (s, _e)=> Console.WriteLine(_e.Data); 5 process.ErrorDataReceived += (s, _e) =>Console.WriteLine(_e.Data); 6 //当EnableRaisingEvents为true,进程退出时Process会调用下面的委托函数 7 process.Exited += (s, _e) => Console.WriteLine("Exited with " + _process.ExitCode); 8 process.EnableRaisingEvents = true; 9 process.BeginOutputReadLine(); 10 process.BeginErrorReadLine(); 11 process.WaitForExit(); 12 } 13 catch (Exception e) 14 { 15 Console.WriteLine(ex.Message); 16 }
需要注意的是,不能对同一个重定向流混合使用异步和同步读取操作。
在异步或同步模式下打开 Process 的重定向流后,对该流的所有进一步的读取操作都必须在同一模式下进行。
例如,不要对StandardOutput 流调用BeginOutputReadLine 后接着调用ReadLine,反之亦然。
但是,可以在不同的模式下读取两个不同的流。例如,可以先调用BeginOutputReadLine,然后再为StandardError 流调用 ReadLine。
标签:
原文地址:http://www.cnblogs.com/Elson8080/p/4424461.html