C#輸入輸出重定向 方法二:異步process


使用事件和委托,進程有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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM