我正在使用BackgroundWorker线程在Silverlight 4中的GUI线程之外做一些工作。我想从后台线程更新GUI上下文中的小部件,但是已经从Microsoft文档中读取了关于这样做的警告。我理解从一个线程到另一个线程的通信会引发异常,因为只有GUI线程可以更新小部件,但不是为此提供的BeginInvoke:
// BackgroundWorker thread code...
Widget.Dispatcher.BeginInvoke(() => Status.Text = "Hello");
但是,我的工作代码中出现了一些不可预测的结果。
与GUI线程进行交叉沟通的正确方法是什么?是通过将结果集合传递出RunWorkerCompleted方法吗?
谢谢,
斯科特
答案 0 :(得分:1)
您不直接调用GUI代码。
您必须触发UI线程订阅的事件和事件。然后进行必要的编组以安全地更新UI。
这方面有很多问题(和答案)。请参阅右侧栏中的一些“相关”问题。