Прогресс в реальном времени от службы Windows - PullRequest
1 голос
/ 24 марта 2011

Я работаю над приложением, которое, как мне кажется, лучше подходит для службы Windows. Единственная проблема, с которой я столкнулся при планировании преобразования, заключается в том, что у него есть окно, в котором отображается активность. Теперь я знаю, что нехорошо (и не рекомендуется в Win7) показывать графический интерфейс из службы, поэтому мой вопрос в том, как лучше всего показать прогресс?

Моей первой идеей был метод опроса с использованием RPC и MIDL, но операция могла начинаться и заканчиваться через секунду или две, что было бы очень неточно при использовании опроса.

Какие у меня есть другие варианты для этого?

Спасибо, J * +1007 *

РЕДАКТИРОВАТЬ: мой вопрос больше о способе связи, я планирую разделить его на службу и значок на панели задач, но я хочу отобразить окно с индикаторами выполнения, чтобы показать ход выполнения задач в службе, но опрос быть слишком медленным, если это не было секунды, которая кажется пустой тратой, есть ли способ продвинуть прогресс в приложение панели задач?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

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

Механизмы push:

  • Общая память, мьютекс и событие (CreateEvent).Используйте вызов PulseEvent всякий раз, когда обновляется состояние службы, подождите, пока приложение systray ожидает события (например, MsgWaitForMultipleObjects)
  • Именованные каналы (CreateNamedPipe) - они также ожидаемы для приложения systray
  • TCP/ UDP - избегайте этого, вы просто столкнетесь с перегрузочными брандмауэрами, которые не понимают концепцию localhost
1 голос
/ 24 марта 2011

Создать иконку в системном трее.Когда ваш сервис делает свое дело, измените значок на что-нибудь анимированное, и измените всплывающую подсказку значка (когда пользователь наводит курсор мыши), чтобы отображать завершенный прогресс в тексте всплывающего окна.Я бы, наверное, не анимировал иконку.Просто взгляните на это по-другому.Сделай это красным или что-то в этом роде.

...