• 如何在 Worker thread 中更新 UI


    Silverlight 中调用服务全部采用异步方式,在调用 WCF 时似乎没有什么问题。
    但是如果要用一个 WebRequest 对象去向某个页面 Post 一些内容,然后获得回应。
    就会发现在 Worker thread 中将无法更新 UI.
    在 Windows Forms 里,可以用 Control.Invoke. 但是 Silverlight 没有这个。

    Silverlight 中有更好的办法。DependencyObject 类有一个属性 Dispatcher,可以通过它来更新相关 UI 对象。
    比如可以这样写:

    (假设是在上传一个文件后更新文件列表)

    private void UpdateFileList(int newFileId)
    {
       
    // 
    }
    private delegate void UpdateFileListDelegate(int newFileId);

    // Worker thread
    void ResponseReady(IAsyncResult asyncResult)
    {
       
    // 
       
    // 更新文件列表
       listFiles.Dispatcher.BeginInvoke(
          
    new UpdateFileListDelegate(UpdateListFile), newFileId
       );
    }


    注意这个 BeginInvoke 方法很先进. 他可以接受任何的 delegate,还能传递任意数目的参数过去。
    这里传了一个简单的 newFileId.

    补充:

    如果需要同时更新多个控件,则可以通过他们共同的祖先控件的 Dispatcher 来调用。

     本文转自:http://www.cnblogs.com/RChen/archive/2008/07/25/1250948.html

  • 相关阅读:
    前端笔记7
    前端笔记6
    列表、行块元素
    我的学习方法(5)
    (读后摘抄)《计算机程序设计语言的发展》_王汝传
    电影《比利·林恩的中场战事》
    关于优化(1)
    Debug技巧(1)
    奇奇怪怪的东西(1)
    我的学习方法(4)
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1766878.html
Copyright © 2020-2023  润新知