Очистка потока, созданного BeginOutputReadLine - PullRequest
0 голосов
/ 11 января 2012

Я работаю над приложением winform в C #, которое запускает другие программы. Работает довольно хорошо.

Но я замечаю, что он замедляется после некоторых запусков. Итак, я контролировал темы и обнаружил, что:

_windowsProcess.BeginOutputReadLine();
_windowsProcess.BeginErrorReadLine();

Создает две темы. Это нормально, поскольку я использую это для получения некоторой информации с обработчиками событий, поскольку мне нужны асинхронные журналы.

Когда мой процесс убит (каким бы он ни был), я использую:

_windowsProcess.CancelOutputRead();
_windowsProcess.CancelErrorRead();

Я надеялся, что это убьет мои два лишних потока, но это не так. Когда я читаю MSDN, он говорит, что перестает обрабатывать события, но если я снова использую BeginOuputReadLine, я мог бы повторно использовать буфер. Так что я предполагаю, что это означает: «мы не убиваем потоки».

Мне это не нужно, и я не хочу убивать свои процессы, это обходной путь?

Кстати, даже если я удаляю буфер, делаю:

_windowsProcess.OutputDataReceived -= new DataReceivedEventHandler(OnDataReceived);
_windowsProcess.ErrorDataReceived -= new DataReceivedEventHandler(OnDataReceived);

У меня такая же проблема.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...