[Silverlight] 如何在 Worker thread 中更新 UI
来源:互联网 发布:淘宝欧时力代购真假 编辑:程序博客网 时间:2024/05/16 14:17
Silverlight 中调用服务全部采用异步方式,在调用 WCF 时似乎没有什么问题。
但是如果要用一个 WebRequest 对象去向某个页面 Post 一些内容,然后获得回应。
就会发现在 Worker thread 中将无法更新 UI.
在 Windows Forms 里,可以用 Control.Invoke. 但是 Silverlight 没有这个。
Silverlight 中有更好的办法。DependencyObject 类有一个属性 Dispatcher,可以通过它来更新相关 UI 对象。
比如可以这样写:
(假设是在上传一个文件后更新文件列表)
注意这个 BeginInvoke 方法很先进. 他可以接受任何的 delegate,还能传递任意数目的参数过去。
这里传了一个简单的 newFileId.
补充:
如果需要同时更新多个控件,则可以通过他们共同的祖先控件的 Dispatcher 来调用。
但是如果要用一个 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
);
}
{
//
}
private delegate void UpdateFileListDelegate(int newFileId);
// Worker thread
void ResponseReady(IAsyncResult asyncResult)
{
//
// 更新文件列表
listFiles.Dispatcher.BeginInvoke(
new UpdateFileListDelegate(UpdateListFile), newFileId
);
}
注意这个 BeginInvoke 方法很先进. 他可以接受任何的 delegate,还能传递任意数目的参数过去。
这里传了一个简单的 newFileId.
补充:
如果需要同时更新多个控件,则可以通过他们共同的祖先控件的 Dispatcher 来调用。
- [Silverlight] 如何在 Worker thread 中更新 UI
- Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新UI
- Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新UI
- UI Thread & Worker Thread
- Android:UI更新方法三:Handler+Worker Thread
- Thread Synchronization - UI Thread and Worker Thread
- 在子线程中如何更新ui
- Silverlight - 在非UI线程中使用Dispatcher更新UI对象
- Silverlight - 在非UI线程中使用Dispatcher更新UI对象(转)
- Silverlight - NavigationService & UI Thread
- WinForm/Silverlight多线程编程中如何更新UI控件的值
- WinForm/Silverlight多线程编程中如何更新UI控件的值
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- android系统中的多线程(二): 关于在work thread中对UI进行更新和设置
- android如何在子线程中更新UI
- android-如何在子线程中更新ui
- 在Fragment的延时操作中如何更新UI
- [Silverlight] 用 IronPython 创建和调用用户控件
- [Silverlight] Nikhil Kothari 的动画框架 Glitz(摘要)
- .net framework 3.5 beta 2 / vs 2008 beta 2 有问题!
- 几个微软产品组的团队网站地址
- Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
- [Silverlight] 如何在 Worker thread 中更新 UI
- Linq to sql 中如何进行 left join
- Silverlight 2 beta 2 bug 解决办法 (持续更新中)
- Silverlight + WCF 常见错误调试方法
- [Silverlight] 写了两个方便 DOM 查找的扩展方法
- Scott Guthrie 写的 Silverlight 教程索引
- Silverlight 文章收集
- [Silverlight] 一个易犯的错误:关于调用 WCF 服务
- [Silverlight] 改进 Nikhil Kothari 的换肤方案:允许自定义控件的皮肤定义