Уведомления среды выполнения Windows в событии DispatchTimer

У меня есть простая форма xaml, которая при вызове LoadState включает таймер отправки. Когда таймер отправки срабатывает, он проверяет сервис на наличие новых элементов. Если новый элемент соответствует определенным критериям, он добавляет сообщение в локальную переменную (которая в конечном итоге привязывается к списку), и мы используем инфраструктуру ToastNotification для создания нового всплывающего уведомления. Тем не менее, одна вещь, которую я заметил, заключается в том, что ToastNotifications работают только тогда, когда приложение сфокусировано (что, конечно, лишает смысла). Я думаю, что это имеет смысл отчасти потому, что мое приложение приостанавливается, когда оно не сфокусировано.

Однако я знаю, что мой DispatchTimer выполняется, когда приложение приостановлено, потому что я вижу, как веб-запросы отправляются в службу. Это должно означать, что мой вызов для отправки уведомления каким-то образом отложен. Я полагаю, концептуально, как мне заставить выполнять всплывающие уведомления, если мое приложение приостановлено? Я читал о BackgroundTasks, но они реагируют только на системные события. Чего я действительно хочу, так это того, чтобы мое приложение опрашивало сообщения независимо от его приостановленного состояния, обновляло пользовательский интерфейс, когда это возможно, и обновляло уведомления независимо от того, приостановлено приложение или нет.


person Richthofen    schedule 25.04.2014    source источник


Ответы (2)


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

person Matt Hidinger    schedule 30.04.2014
comment
Хороший ответ. Я полагаю, это имеет смысл, мне все равно, поступали ли новые сообщения, кроме предупреждения пользователя. поэтому я могу каждые 5 секунд проводить опрос сообщений, когда пользователь находится в приложении для просмотра сообщений, и реже опрашивать с помощью BackgroundTask только для определенных критериев в фоновом потоке. - person Richthofen; 01.05.2014

Похоже, вы ищете что-то более похожее на push-уведомления. Подойдут ли они вам? Вы можете использовать их для отображения всплывающих уведомлений, обновления живой плитки и т. д.

Разработка платформы уведомлений в Windows

Мобильные push-уведомления любому клиенту с Azure Notification Hubs

Начало работы с push-уведомлениями уведомления в мобильных сервисах

person Filip Skakun    schedule 29.04.2014
comment
Толчок - это не совсем то, чем я занимаюсь, я так не думаю. Я часто опрашиваю API, но сами данные API находятся вне моего контроля (третья сторона). - person Richthofen; 29.04.2014
comment
Не могли бы вы приостановить опрос, когда ваше приложение исчезнет, ​​и возобновить, когда оно снова появится? - person Filip Skakun; 29.04.2014
comment
Конечно, но это противоречит сути уведомления, верно? Если пользователю нужно открыть приложение, ему не нужны уведомления. Итак, все ли приложения уведомляют, когда не активны приложения «push»? Является ли Twitter для WinRT push-уведомлением? - person Richthofen; 29.04.2014
comment
Я бы так подумал. Это всплывающие уведомления, которые, я думаю, запускаются push-уведомлениями. Возможно, есть способ вызвать их из фоновой задачи, но я никогда этого не делал, поэтому не могу сказать наверняка, и, вероятно, в любом случае предпочтительнее использовать push-уведомление. - person Filip Skakun; 29.04.2014