[Silverlight] 如何在 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 来调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值