Поведение DispatcherTimer в приложении WP7 - PullRequest
1 голос
/ 10 августа 2011

Я пишу приложение для записи звука для WP7. У меня есть объект DispatcherTimer в моем классе ViewModel, который, когда происходит запись, подсчитывает прошедшие секунды, чтобы показать длину записи пользователю. У меня следующая проблема с приложением:

Тиковый интервал для DispatcherTimer установлен в одну секунду (1000) мс.

Когда я нажимаю кнопку запуска, запускается DispatcherTimer. Когда я нажимаю кнопку остановки, поток DispatcherTimers завершается. (через секунду !, подумал, что я не собирался быть таким))

Если я нажимаю кнопку «Пуск» после быстрого нажатия кнопки «Стоп» (менее секунды), мой DispatcherTimer не запускается снова, так как он еще не остановился. (поток не вышел)

В основном, меня больше всего беспокоит то, почему DispatcherTimer должен ждать, пока придет время для его тика, чтобы понять, что он остановлен, и поток, созданный для выполнения тиков, должен завершиться?

Как я могу обойти эту проблему? Спасибо.

1 Ответ

1 голос
/ 10 августа 2011

DispatcherTimers не гарантированно выполняется точно, когда наступает временной интервал, но они гарантированно не будут выполняться до наступления временного интервала Это связано с тем, что операции DispatcherTimer помещаются в очередь DispatcherTimer, как и другие операции. Время выполнения операции DispatcherTimer зависит от других заданий в очереди и их приоритетов.

Ссылка: http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer(v=VS.95).aspx

Вам лучше использовать System.Threading.Timer, который является классом таймера, который запускается в отдельном потоке. Это хорошо для чисто числовой синхронизации, когда вы не пытаетесь обновить пользовательский интерфейс и т. Д.

...