當我們寫完程序,想要在另一個平台上跑我們所寫的程序的時候,就需要用到重定向輸入輸出。
重定向有兩中方式,即同步和異步。
下面來講講同步
代碼:
Process process = new Process(); process.StartInfo.FileName = "XX.exe";//這兒放你的exe文件的路徑 process.StartInfo.UseShellExecute = false; // 是否使用外殼程序 process.StartInfo.CreateNoWindow = true; //是否在新窗口中啟動該進程的值 process.StartInfo.RedirectStandardInput = true; // 重定向輸入流 process.StartInfo.RedirectStandardOutput= true; //重定向輸出流 process.StartInfo.RedirectStandardError= true; //重定向錯誤流 process.Start(); process.StandardInput.WriteLine(textBox1.Text);//讀取textBox1的文本內容。 process.StandardInput.WriteLine(textBox2.Text); textBox3.Text = process.StandardOutput.ReadLine();//將輸出結果放在textBox3中 process.WaitForExit(); process.Close();
正如代碼中一樣,重定向是必須將重定向的輸入輸出和錯誤流改成true,進程才可進行重定向的輸入輸出,改完之后,開始進程,就可以運行對應的exe文件了。
系統會自動將你在平台的輸入放入你的運行的exe文件中,並會將結果傳到你指定的位置。
Read、ReadLine 和 ReadToEnd等方法對進程的輸出流執行同步讀取操作。這些同步讀取操作只有在關聯的 Process 寫入其StandardOutput 流或關閉該流后才能完成。
同步讀取操作在讀取 StandardOutput 流的調用方及寫入該流中的子進程之間引入一個依賴項。這些依賴項可能導致產生死鎖情況。調用方讀取子進程的重定向流時依賴於該子進程。調用方將等待讀取操作,直到子進程寫入流或關閉流為止。子進程寫入足夠多的數據以填充重定向流的時間依賴於父進程。子進程將等待下一次寫操作,直到父進程讀取了全部流或關閉該流為止。當調用方和子進程相互等待對方完成操作時,就會產生死鎖情況,使雙方都無法繼續執行操作。可以通過計算調用方和子進程之間的依賴項從而避免出現死鎖情況。