2011-07-18 7 views
0

私は送信コードが正しいかどうかをチェックするプログラムを書いています。ここ は、私のコードのいくつか...入力が十分な大きさ及び提出プログラムは何を読んでいないながら標準入力がC#プロセスでスタックしないようにする方法

Process submitProg; 
StreamWriter progInput; 
string input;//it will be submitProg's standard input 

//initialization 
//... 

submitProg.Start(); 
progInput = submitProg.StandardInput; 
progInput.Write("{0}",input); 
progInput.Close(); 
progInput.Dispose(); 


while(!submitProg.HasExited) 
    if(timeOUT) 
     submitProg.Kill(); 

が驚いたことに、それはラインprogInput.Write("{0}",input);で動けなくなりますです。

投稿コードの中には、何もしないようなやり方があるものがあります。while(1);私は、入力ファイルが十分に小さいときにプロセスを終了することができます。反対に、入力ファイルが大きければ、プログラムはタイムアウトをチェックせず、入力を読み込んでいる間にスタックしません。

何も読み取らないコードに詰まるのを避けるための解決策はありますか?おかげさまで

答えて

0

あなたは、標準入力バッファーとテストしているプログラムのサイズに恵まれています。バッファを読み取らない場合は、標準入力への書き込みがブロックされます。

この問題を回避する方法の1つは、別のスレッド(ThreadPoolスレッドなど)の標準入力ストリームに書き込むことです。 Write、Close、Dispose行をThreadPoolタスクに置き、ThreadPool.QueueUserWorkItemを使用するだけです。

補足として、progInput.CloseとProgInput.Disposeを呼び出す必要はありません。 Dispose呼び出しはうまくいくはずです。

+0

ありがとう、私はマルチスレッドで解決しました。 – Nekosyndrome

関連する問題