Worker thread

2008-07-25 15:41:43.0     推荐:0    收藏:0    评论:0     来源:中国IT实验室

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.

您可以针对本文进行:[评论]  [收藏]  [推荐]  
  • 共有0条评论  点击查看更多评论
  • 网友评论仅供网友表达个人看法,并不表明e800同意其观点或证实其描述
我想发表评论:
用户名密码
  • 匿名发表
    验证码: