【发布时间】:2010-07-22 14:19:01
【问题描述】:
我在 Silverlight 中有一个非常简单的 StopWatch 应用程序。我的MainPage 类中有以下私有属性:_StopPressed(布尔)、_TimeStart、_Elapsed(字符串)。我还有一个“开始”和“停止”按钮。
“开始”按钮调用一个名为UpdateTime 的方法,该方法不断更新_ElapsedTime,直到_StopPressed 为真。当我最初编写它时,UpdateTime 会阻止 UI,所以我无法按下停止按钮,所以我更新了我的代码以使用 System.Threading.ThreadPool.QueueUserWorkItem 和我的 UpdateTime 方法,以便它在后台线程上更新 _Elapsed .这非常适合更新值。
但是,如果我尝试在UpdateTime() 中设置TextBlock 的.Text 值,我会得到一个UnauthorizedAccessException,这与一个线程访问另一个线程中的数据有关。
我需要做些什么来避免出现此异常并在不阻塞的情况下适当地更新 UI?
【问题讨论】:
-
尝试使用调度程序更新文本:Dispatcher.BeginInvoke(() => { .Text="Hello" });
-
@Malcolm 让它更新一次文本,但随后它冻结并阻止 UI。
标签: c# .net vb.net silverlight multithreading