如何避免标准输入卡在c#进程中

时间:2011-07-18 10:26:45

标签: c# .net process

我正在编写一个程序来检查提交代码是否正确。 这是我的一些代码...

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);无所事事那样棘手。当输入文件足够小时,我可以终止进程。相反,如果输入文件较大,程序将不会检查超时并在读取输入时卡住。

我是否有任何解决方案可以避免陷入无法读取任何内容的代码中。 感谢。

1 个答案:

答案 0 :(得分:0)

您将受标准输入缓冲区大小和您正在测试的程序的支配。如果它没有读取其缓冲区,则对标准输入的写入可以阻止。

避免该问题的一种方法是在不同的线程上写入标准输入流,例如ThreadPool线程。只需将Write,Close,Dispose行放在ThreadPool任务中,然后使用ThreadPool.QueueUserWorkItem。

作为旁注,您可能不需要调用progInput.Close和ProgInput.Dispose。 Dispose调用应该没问题。