异步的Silverlight WCF回调(Asynchronous Silverlight WCF

2019-10-28 19:27发布

我已经创建了自己的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类在所有所以我希望了解更多。

Answer 1:

是的..签出的链接获取更多信息。 我加入了乔尔的回答以下问题。

在Silverlight 2 Beta 2中有在用于异步通信的并发模型显著变化。 在Beta 1中,这些类型的请求的UI线程上返回。 在Beta 2中,当你选择使用WebRequest你告诉的Silverlight BeginGetResponse为使用来自一个线程池中的工作线程。 其结果是,你不能更新UI线程上的任何用户界面元素。 使用Dispatcher.BeginInvoke是一种方式来获得的方法从这个线程池THEAD还击的UIThread。 从异步回调UI元素的任何互动都将抛出一个跨线程异常。



文章来源: Asynchronous Silverlight WCF callback