Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События Process.OutputDataReceived приходят скопом 
:(
    Опции темы
semibug
Дата 22.9.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Запускаю внешнее приложение:

Код

                progProcess.StartInfo.FileName = "prog.exe";
                progProcess.StartInfo.Arguments = "";
                progProcess.StartInfo.UseShellExecute = false;
                progProcess.StartInfo.RedirectStandardOutput = true;
                progProcess.StartInfo.RedirectStandardError = true;
                progProcess.StartInfo.CreateNoWindow = true;
                progProcess.EnableRaisingEvents = true;
                progProcess.Exited += new EventHandler(progExited);
                progProcess.OutputDataReceived += new DataReceivedEventHandler(ProgProgressOutputHandler);
                progProcess.Start();
                progProcess.BeginOutputReadLine();

Далее выполняются другие задачи.
Почему то все события вывода сообщений в std::cout из внешнего приложения случаются скопом, одно за другим, после завершения внешнего приложения.
Хотелось бы получать данные по мере их генерации внешней программой.
Подскажите, как это правильно сделать?

PM   Вверх
userdab
Дата 22.9.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Посмотрите эту тему 
PM MAIL   Вверх
semibug
Дата 22.9.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



userdab, в моем случае вызов process.BeginOutputReadLine() находится не в UI потоке.
Нагуглил, что данные, выплевываемые внешней программой в std::cout проходят буферизацию. Т.е. пока их не наберется большое кол-во или процесс не завершиться, мы их получить не можем.
Наверное должно быть какое-то решение получать от чужого приложения вывод в консоль асинхронно. Но пока в голову ничего не приходит.

Добавлено через 3 минуты и 46 секунд
Решил с помощью std::cout.flush() во внешней программе. Теперь события возникают стразу, как только выполняется flush.

PM   Вверх
semibug
Дата 22.9.2010, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Не могу сообразить как разобрать откуда пришел текст, если было запущено несколько процессов, для этого надо использовать разные обработчики?
PM   Вверх
semibug
Дата 24.9.2010, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

Репутация: нет
Всего: нет



Почему то некоторые строки просто пропадают (обработчик не срабатывает). Например если писать из запущенного приложения в std::cout числа от 1 до 100, то в обработчик могут попасть 1, 2, 5, 9 и т.д..
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.