2 ответов:
Windows.Forms.Timerиспользует цикл сообщений windows forms для обработки событий таймера. Он должен использоваться при записи событий синхронизации, которые используются в приложениях Windows Forms, и вы хотите, чтобы таймер срабатывал в основном потоке пользовательского интерфейса.
DispatcherTimer- это механизм синхронизации WPF. Он должен использоваться, когда вы хотите обрабатывать синхронизацию аналогичным образом (хотя это не ограничивается одним потоком - каждый поток имеет свой собственный диспетчер), и вы используете WPF. Он запускает событие на том же нить как диспетчер.В общем,
WPF == DispatcherTimerиWindows Forms == Forms.Timer.как говорится, есть и
System.Threading.Timer, который является таймеромclassэто срабатывает в отдельном потоке. Это хорошо для чисто численного времени, когда вы не пытаетесь обновить пользовательский интерфейс и т. д.
Я нашел хорошую статью о таймерах с небольшими примерами здесь: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
В заключение:
Если DoSomething () манипулирует компонентами GUI, то с таймером вам нужно использовать: это.Диспетчер.Invoke ((Action)delegate { //GUI RELATED CODE HERE} так как вы не можете получить доступ к элементам управления GUI из другого потока напрямую. С DispatcherTimer вам не нужно этого делать.
Если DoSomething () выполняет трудоемкую задачу, тогда GUI будет замораживаться в случае DispatcherTimer. В случае таймера это не будет, так как длинный methos выполняется в другом потоке
Comments