C#輸入輸出重新導向 方法二:非同步process

來源:互聯網
上載者:User

標籤:

使用事件和委託,進程有2個事件OutputDataReceived、ErrorDataReceived可用於重新導向標準輸出和標準錯誤輸出;

 

需要注意的是InputDataReceived並不是process的事件,所以標準輸入並不可以如此重新導向;

 

使用前需加上:   using System.Diagnostics;  //可使用process

第一步:確定必要成分

 

1 Process StartInfostartInfo =newProcessStartInfo(.exe);2 startInfo.CreateNoWindow = true;   //不建立視窗3 startInfo.UseShellExecute = false;4 //不使用系統外殼程式啟動,重新導向輸出的話必須設為false5 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

 

C#輸入輸出重新導向 方法二:非同步process

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.