我正在打开一个System.Diagnostic.Process来从一个进程中读取stdout,我希望能够在经过一段时间后中断它。
try
{
output = outputStream.ReadToEnd();
}
catch (ThreadInterruptedException e)
{
return;
}
由于线程在ReadToEnd()方法中,因此不起作用。我试图从主线程关闭流,希望'EOF读取方法,但这也不起作用。
答案 0 :(得分:0)
我会冒险中止
try
{
Timer watchdog = new Timer(abortMe, Thread.CurrentThread, timeout, Timeout.Infinite);
output = outputStream.ReadToEnd();
watchdog.Dispose();
}
catch (ThreadAbortException e)
{
return;
}
private void abortMe(object state)
{
((Thread)state).Abort()
}
实际上,当我使用TCP和UDP套接字时,我成功关闭了流:它触发了SocketException并且线程被成功中断。
顺便说一句,您的信息流应该是输入信息流吗?你不应该读取输出流...
答案 1 :(得分:0)
您可以尝试在Dispose()
对象和流上调用Process
。我想outputStream
通过Process
链接到Process.StandardOutput
实例,所以这应该会产生预期效果。
编辑 - 请参阅我对this question的回答 - .Net I / O的这个区域容易出现死锁,如果可以选择异步I / O,则更喜欢。