2013-10-09 79 views
1

我的C#程序需要通過其標準輸入將數據發送到第三方程序。但是,程序在處理之前會等待輸入流到達EOF。在這裏我的代碼:C# - 子進程關閉輸入流

// Starts the process. 
var process = new Process(); 
process.StartInfo.CreateNoWindow = true; 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardInput = true; 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.FileName = "foo.exe"; 
process.Start(); 

// Sends data to child process. 
var input = process.StandardInput; 
input.WriteLine("eval('2 * PI')"); 
input.Flush(); 
input.Close(); 

// Reads the result. 
var output = process.StandardOutput; 
var result = output.ReadLine(); 

兒童節目不會做任何事情,我的C#代碼變爲output.ReadLine()電話卡。但是,如果我殺死了C#進程,那麼孩子開始正確地處理我發送的數據。在我還活着的時候,如何讓孩子遇到EOF?

回答

2

StreamWriter在關閉流時可能不會發送實際的eof。您可以在關閉之前嘗試將自己的內容寫入流中。像這樣的東西可能會工作:

input.Write((char)26); 

您可能需要找出該過程期望的eof。

+0

謝謝,但沒有奏效。該過程期望文件的實際結束,而不是內聯EOF字符。 – fernacolo

+0

如果關閉流並不意味着文件結束它有什麼期望?也許將輸入重定向回程序會給程序提供它所需要的信號。 – tinstaafl

+1

這對我有效。我從來沒有意識到Windows使用SUB(0x1A)作爲EOF,而不是像unix一樣使用EOT(0x04)。 –