0

System.Diagnostic.Processを開いて、プロセスからstdoutを読み取りますが、一定の経過時間後に中断できるようにしたいと思います。

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

スレッドはReadToEnd()メソッドにあるため、これは機能しません。ReadメソッドのEOFになることを期待して、メインスレッドからストリームを閉じようとしましたが、それも機能しませんでした。

4

2 に答える 2

0

ストリームだけでなくDispose()、オブジェクトでも呼び出すことができます。経由でインスタンスProcessoutputStreamリンクされているので、これは望ましい効果があるはずです。ProcessProcess.StandardOutput

編集 -この質問に対する私の回答を参照してください- .Net I/O のこの領域はデッドロックが発生しやすく、それがオプションである場合は非同期 I/O を優先します。

于 2010-10-29T14:32:50.330 に答える
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 に答える