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

如何避免标准输入卡在c#过程中,c#,.net,process,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); progInpu

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

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)什么都不做。当输入文件足够小时,我可以终止进程。相反,如果输入文件更大,程序将不会检查超时,并在读取输入时卡住

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

标准输入缓冲区的大小和正在测试的程序决定了您的命运。如果它不读取缓冲区,则对标准输入的写入可能会被阻塞

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

作为旁注,您可能不需要调用progInput.Close和progInput.Dispose。Dispose呼叫应该可以