У меня очень простое приложение StopWatch в Silverlight. У меня есть следующие частные свойства в моем классе MainPage
: _StopPressed
(bool), _TimeStart
, _Elapsed
(строка). У меня также есть кнопка «Старт» и «Стоп».Обновите TextBlock с истекшим временем, вызвав UnauthorizedAccessException
Кнопка «Пуск» вызывает метод, называемый UpdateTime
, который постоянно обновляет _ElapsedTime
до _StopPressed
. Когда я изначально написал его, UpdateTime
заблокировал пользовательский интерфейс, чтобы я не мог нажать кнопку «Стоп», поэтому я обновил свой код, чтобы использовать System.Threading.ThreadPool.QueueUserWorkItem
с моим методом UpdateTime
, чтобы он обновлял _Elapsed
на фоновом потоке. Это отлично работает при обновлении значения.
Однако, если я пытаюсь установить значение .Text
из моих TextBlock
изнутри UpdateTime()
, я получаю UnauthorizedAccessException
, что имеет дело с одним потоком доступ к данным в другом потоке.
Что мне нужно сделать, чтобы избежать получения этого исключения и соответствующим образом обновить пользовательский интерфейс без его блокировки?
попробуйте обновить текст с помощью диспетчера: Dispatcher.BeginInvoke (() => {.Text = "Hello"}); – Malcolm
@Malcolm, который получает его для обновления текста один раз, но затем он замерзает и блокирует пользовательский интерфейс. –
взгляните на эту ссылку http://msdn.microsoft.com/en-us/library/kbf0f1ct(VS.95).aspx – Malcolm