Повторное использование процесса - асинхронная проблема BeginOutputReadLine - PullRequest
1 голос
/ 28 сентября 2011

Я столкнулся с интересной проблемой.

C # позволяет повторно использовать ресурс процесса (согласно MSDN) - поэтому я вызываю экземплярный метод Start () после завершения процесса:

Process p = new Process();
// init
p.Start();

И спустя некоторое время:

p.Kill();
// not important
p.Start();

Когда у меня есть поток, выполняющий синхронизацию, все выглядит нормально - вывод читается после первого и второго вызова Start ().

Теперь самое смешное.Когда я использую асинхронное чтение (все правильно инициализировано):

p.BeginOutputReadLine();

вывод читается только после первого вызова Start ().После запуска второго вызова без перенаправления любого вывода.

Я также попытался еще раз вызвать Отмена и Начать:

p.CancelOutputRead();
p.Kill();
// not important
p.Start();
p.BeginOutputReadLine();

с тем же результатом.

Некоторыесведения о машине: Win 7 Ultimate x86 SP1 (CPU также x86), протестировано на .NET 2.0 / 3.0, VS 2008

Вопрос в том, является ли это какой-то структурной ошибкой или моим неправильным пониманием определения Process.Start ("Запускает (или повторно использует) ресурс процесса, указанный в свойстве StartInfo этого компонента Process, и связывает его с компонентом. ")?Любая помощь очень ценится.

Я полагаю, что решение заключается в воссоздании объекта процесса, но, вероятно, будет медленнее.

1 Ответ

0 голосов
/ 28 сентября 2011

Вызов Kill делает необходимым добавить ваш обработчик событий для OutputDataReceived снова перед вызовом Start.

...