























2010-03-27 16:14 xiaosonl 阅读(1030) 评论() 收藏 举报
在开发RIA程序时,处理异步操作是个挺麻烦的问题,尤其是串行的异步调用,经常代码会写的嵌套好几层。之前老赵也介绍过一种方法来简化异步操作。我这是另一种思路。
在之前的Silverlight程序开发过程中,我的编程模式是这样的:
这时我们可以换一种思路,反过来做,每一次的操作,我们都发起一个新的线程来执行,不再从UI线程发起。执行过程中遇到的异步操作(网格请求,或者UI操作,因为这时UI有关的操作都必须使用BeginInvoke来调用),可以用ResetEvent来阻塞住发起操作的线程,异步操作执行结束后再继续 因为一开始是在非UI线程中发起操作,所以不会阻塞UI。
总结一下:
最后附上一个简易示例代码(未经运行测试和优化),演示将[下载数据 => 处理数据并更新UI] 的过程模拟成同步操作:
代码
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}private void btnCommand_Click(object sender, RoutedEventArgs e)
{
Command();
}//执行操作
public void Command()
{
ThreadPool.QueueUserWorkItem(t =>
{
UIInvoke(() =>
{
//弹出一个ProgressBar,提示操作正在进行中
});//下载数据
string downloadData = DownLoad();
//更新UI
UIInvoke(() => txtMessage.Text = downloadData);
UIInvoke(()
=>此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。