Как прервать поток ввода-вывода - PullRequest
0 голосов
/ 29 октября 2010

Я открываю System.Diagnostic.Process для чтения stdout из процесса, и я хотел бы иметь возможность прервать его через определенное время.поток находится в методе ReadToEnd ().Я попытался закрыть поток из основного потока, надеясь, что это будет методом чтения, но это тоже не сработало.

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

Вы можете попробовать вызвать Dispose() как для объекта Process, так и для потока.Я предполагаю, что outputStream связан с экземпляром Process через Process.StandardOutput, поэтому это должно иметь желаемый эффект.

РЕДАКТИРОВАТЬ - см. Мой ответ на этот вопрос - эта область.Net I / O склонен к взаимоблокировке, предпочтительнее асинхронный I / O, если это вариант.

0 голосов
/ 29 октября 2010

Я бы рискнул прервать

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, и поток успешно прерывается.

ByКстати, должен ли ваш поток быть потоком input ?Вы не должны читать поток вывода ...

...