代码之家  ›  专栏  ›  技术社区  ›  AlvinfromDiaspar

从异步回调更新UI组件

  •  2
  • AlvinfromDiaspar  · 技术社区  · 14 年前

    现在我知道了调度员和调度员以及他们的好处。

    但看看网上的一些参考资料,比如下面链接的,似乎情况并非如此。

    所以奇怪的是,我没有使用Dispatcher在服务完成事件中更新UI(更新数据绑定的ObservableCollections),但是我从未收到过跨线程异常。

    有谁能解释为什么我没有看到这个例外,或者确认我最初的假设是否正确?

    参考: http://www.silverlightshow.net/items/Tip-Asynchronous-Silverlight-Execute-on-the-UI-thread.aspx

    2 回复  |  直到 14 年前
        1
  •  0
  •   Francesco Abbruzzese    14 年前

    调度器所做的是将消息放入普通的windows消息queuse中。如果更新绑定到UI元素的元素,则不需要使用调度程序,因为更新模型时引发的属性更改已将消息放入windows消息队列,因此不需要调用任何调度程序,否则只需在窗口消息队列中执行两次往返。

        2
  •  0
  •   Joe McBride    14 年前

    最简单的解释是,这取决于如何检索数据以及是否尝试更新UI。例如,当直接使用HttpWebRequest时,它总是需要被封送回UI线程。但是,如果您使用的是WebClient,那么这是为您做的。WCF还将为您执行一些封送处理。

    “Silverlight应用程序中的WCF代理使用启动Web服务调用的线程的同步化上下文,以便在接收到响应时调度异步事件处理程序的调用。”

    http://tomasz.janczuk.org/2009/08/improving-performance-of-concurrent-wcf.html

    希望能有所帮助。