Таймер WPF Dispatcher замораживает мое приложение - PullRequest
4 голосов
/ 16 апреля 2010

У меня небольшая проблема с использованием WPF Dispatcher Timer. При каждом отметке таймера мое приложение на мгновение останавливается (пока не завершится метод отметки времени). Это мой код:

private DispatcherTimer _Timer = new DispatcherTimer();

_Timer.Tick += new EventHandler(_DoLoop);
_Timer.Interval = TimeSpan.FromMilliseconds(1500);
_Timer.Start();

Можно ли как-то избежать этого и обеспечить бесперебойную работу моего приложения?

1 Ответ

6 голосов
/ 16 апреля 2010

Это ожидается. ваш _DoLoop выполняется в том же потоке, что и пользовательский интерфейс.

из Класс DispatcherTimer MSDN

Если System.Timers.Timer используется в Приложение WPF, стоит отметить что System.Timers.Timer работает на другой поток, то пользователь интерфейс (UI) поток. Чтобы доступ к объектам в пользовательском интерфейсе (UI) темы, необходимо опубликовать операция на Диспетчер поток пользовательского интерфейса (UI), использующий Invoke или BeginInvoke. Причины используя DispatcherTimer в противоположность System.Timers.Timer это то, что DispatcherTimer работает на том же нить как Диспетчер и DispatcherPriority может быть установлен на DispatcherTimer.

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

...