当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

如何在Worker thread中更新UI

欢迎进入.NET社区论坛,与200万技术人员互动交流 >>进入

        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.

相关内容
赞助商链接