如何避免标准输入卡在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呼叫应该可以