Сравнение таймера с диспетчером



какая разница between System.Windows.Forms.Timer() и System.Windows.Threading.DispatcherTimer() ? В каких случаях мы должны их использовать? любые лучшие практики ?

76   2  

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 выполняется в другом потоке

    Ничего не найдено.

Добавить ответ:
Отменить.