2010-07-22 3 views
0

У меня очень простое приложение StopWatch в Silverlight. У меня есть следующие частные свойства в моем классе MainPage: _StopPressed (bool), _TimeStart, _Elapsed (строка). У меня также есть кнопка «Старт» и «Стоп».Обновите TextBlock с истекшим временем, вызвав UnauthorizedAccessException

Кнопка «Пуск» вызывает метод, называемый UpdateTime, который постоянно обновляет _ElapsedTime до _StopPressed. Когда я изначально написал его, UpdateTime заблокировал пользовательский интерфейс, чтобы я не мог нажать кнопку «Стоп», поэтому я обновил свой код, чтобы использовать System.Threading.ThreadPool.QueueUserWorkItem с моим методом UpdateTime, чтобы он обновлял _Elapsed на фоновом потоке. Это отлично работает при обновлении значения.

Однако, если я пытаюсь установить значение .Text из моих TextBlock изнутри UpdateTime(), я получаю UnauthorizedAccessException, что имеет дело с одним потоком доступ к данным в другом потоке.

Что мне нужно сделать, чтобы избежать получения этого исключения и соответствующим образом обновить пользовательский интерфейс без его блокировки?

+0

попробуйте обновить текст с помощью диспетчера: Dispatcher.BeginInvoke (() => {.Text = "Hello"}); – Malcolm

+0

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

+0

взгляните на эту ссылку http://msdn.microsoft.com/en-us/library/kbf0f1ct(VS.95).aspx – Malcolm

ответ

0

Использование DispatcherTimer вместо таймера работает почти точно так же, но используется для обновления элементов интерфейса.

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