Silverlight запланировать событие на определенное время - PullRequest
6 голосов
/ 15 октября 2010

Я пытаюсь найти способ вызвать событие Silverlight в определенное время суток.Приложение будет запущено из браузера и будет работать постоянно.Я нашел несколько методов, которые используют таймер для запуска события каждую минуту, а затем проверяют, правильное ли время делать что-то, но это звучит грязно.Есть ли какой-нибудь способ запустить событие, например, в 10:34 23 сентября 2010 года?

Ответы [ 4 ]

2 голосов
/ 19 октября 2010

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

В противном случае просто установите интервал таймера на промежуток времени между текущим и запланированным временем.

0 голосов
/ 15 октября 2010

Я не знаю ни о каком контроле, который делает то, что вы просите. Вот таймеры, с которыми я знаком:

  • System.Threading.Timer (интервал) - генерирует повторяющиеся события (чисто числовое время без обновлений пользовательского интерфейса)
  • System.Windows.Threading.DispatcherTimer (..) - использовать в многопоточном контексте (WPF / Silverlight)
  • System.Windows.Forms.Timer () - Использовать цикл сообщений оконных форм (WinForms в основном потоке пользовательского интерфейса)

Я думаю, что вам лучше всего использовать DispatcherTimer с интервалом, скажем, 30 секунд, а затем сопоставить фактическое время с ожидаемыми временем и датой. Из того, что я помню, такие таймеры предназначены для небольших интервалов, поэтому большие интервалы будут менее точными. (Я говорю с коррекцией)

РЕДАКТИРОВАТЬ : Замечания MSDN о сроках : «Таймеры не гарантированно выполняются точно, когда происходит временной интервал, но они гарантированно не будут выполняться до того, как временной интервал наступит. Это это связано с тем, что операции DispatcherTimer помещаются в очередь Dispatcher , как и другие операции. Когда выполняется операция DispatcherTimer, зависит от других заданий в очереди и их приоритетов. "

0 голосов
/ 16 октября 2010

Спасибо за ответы.Я до сих пор ничего не нашел, но в итоге использовал StoryBoard в качестве компонента синхронизации, поскольку DispatcherTimer работает в том же потоке, что и пользовательский интерфейс, а StoryBoard - нет.

Вы можете прочитать больше о сравнении междудва здесь.

http://blogs.silverlight.net/blogs/msnow/archive/2009/11/09/69731.aspx

0 голосов
/ 15 октября 2010

Я не верю, что в Silverlight есть такая функция.Если вам не нравится подход опроса, вы всегда можете получить разницу между DateTime.Now и целевым временем и установить таймер на это время.Хотя я не знаю, насколько это будет надежно.

...