0

我正在打开一个 System.Diagnostic.Process 以从进程中读取标准输出,并且我希望能够在经过一定时间后中断它。

try
{
    output = outputStream.ReadToEnd();
}
catch (ThreadInterruptedException e)
{
    return;
}

这不起作用,因为线程在 ReadToEnd() 方法中。我试图从主线程关闭流,希望 EOF 是 Read 方法,但这也不起作用。

4

2 回答 2

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 并且线程成功中断。

顺便说一句,您的流应该是输入流吗?您不应该读取输出流...

于 2010-10-29T01:18:17.653 回答
0

您可以尝试调用Dispose()对象Process以及流。我想通过outputStream链接到Process实例,Process.StandardOutput所以这应该有预期的效果。

编辑 - 请参阅我对这个问题的回答- .Net I/O 的这个区域很容易出现死锁,如果可以的话,更喜欢异步 I/O。

于 2010-10-29T14:32:50.330 回答