2011-08-10 2 views
1

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

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

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

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

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

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

ответ

1

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

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

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

+0

Выполнение и прекращение его исполнения досрочно - это не то же самое. –

Смежные вопросы