процесс завершился, но буфер все еще печатается, c # - PullRequest
1 голос
/ 01 апреля 2009

привет, я создал процесс в C # для выполнения внешней программы, я использовал асинхронные методы для чтения стандартного вывода, и все работает нормально. Однако у меня есть проблема, я печатаю строку, указывающую, что процесс завершен. Проблема в том, что иногда это может происходить, когда данные в буфере огромны, что процесс может завершиться, но, поскольку печать происходит в другом потоке, он все еще может печатать данные. Таким образом, информация, указывающая, что процесс завершен, отображается до того, как будет напечатан весь вывод. Есть ли что-то, что есть в .NET для решения такой проблемы? так как я делаю асинхронный вызов, поэтому я не могу получить доступ к значению process.standardoutput, так как это вызывает конфликт. Что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2009

Используйте синхронизацию между вашими потоками!

Вы должны посмотреть на AutoResetEvents , которые идеально соответствуют вашему сценарию (т. Е. Поток хочет уведомить другого о том, что событие произошло - в вашем примере, что чтение из буфера закончено)

Как правило, ваш основной поток будет ожидать AutoResetEvent, который будет пульсироваться рабочим протектором, как только его работа будет выполнена.

В этом конкретном случае (т. Е. Ожидании завершения потока) вы также можете использовать Thread.Join , который будет блокировать ваш основной поток до тех пор, пока ваш рабочий поток не будет завершен

1 голос
/ 01 апреля 2009

Если вы вызываете EndInvoke для асинхронного делегата, поток должен блокироваться до завершения операции.

...