我已经创建了自己的 WCF 服务,并且已经成功地通过我的 Silverlight 客户端与其交谈。不过,我在异步回调中遇到了一个有趣的问题。当我的回调被调用时,我无法使用可怕的无效跨线程访问更新任何 UI 控件
这是我的回调函数的样子
private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
{
lblDisplay.Text = e.Object.ToString();
}
一个快速的谷歌搜索告诉我我必须这样做。
private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
{
Dispatcher.BeginInvoke( () => lblDisplay.Text = e.Object.ToString() );
}
现在一切正常,但我没想到我的回调会在不同的线程上运行。我是否总是必须使用 Dispatcher 类来修改我的类中的任何内容,还是仅限于 UI 元素?我根本不熟悉 Dispatcher 类,所以我希望更多地了解它。