不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使得比较复杂的逻辑操作由异步进行,用户仍然可以继续使用应用,不会有无响应的等待情况出现。
本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程。首先我们来编写一个“Get Blogs”按钮,点击它可以从Windows Blog中获取博客列表。当然获取博客信息的过程是由异步进行的,这个过程中为了测试用户仍然可以与应用交互,我们再设计一个“Change Text”用来修改waitingText的内容。
代码
<span><</span><span>StackPanel </span><span>Orientation</span><span>="Horizontal" </span><span>Grid.Row</span><span>="1">
<</span><span>StackPanel</span><span>>
<</span><span>TextBlock </span><span>x</span><span>:</span><span>Name</span><span>="listTitle" </span><span>Height</span><span>="40" </span><span>Width</span><span>="200"
</span><span>Style</span><span>="{</span><span>StaticResource </span><span>BasicTextStyle</span><span>}"/>
<</span><span>ListView </span><span>x</span><span>:</span><span>Name</span><span>="blogList" </span><span>ItemTemplate</span><span>="{</span><span>StaticResource </span><span>listTemplate</span><span>}"
</span><span>VerticalAlignment</span><span>="Top" </span><span>HorizontalAlignment</span><span>="Left" </span><span>Height</span><span>="550"
</span><span>Margin</span><span>="50,10,0,0" </span><span>Width</span><span>="650"/>
</</span><span>StackPanel</span><span>>
<</span><span>StackPanel </span><span>Orientation</span><span>="Vertical" </span><span>VerticalAlignment</span><span>="Top">
<</span><span>TextBlock </span><span>x</span><span>:</span><span>Name</span><span>="waitingText" </span><span>Height</span><span>="40" </span><span>Width</span><span>="200"
</span><span>Style</span><span>="{</span><span>StaticResource </span><span>BasicTextStyle</span><span>}" />
<</span><span>Button </span><span>x</span><span>:</span><span>Name</span><span>="getBlogs" </span><span>Content</span><span>="Get Blogs" </span><span>Width</span><span>="150"
</span><span>Click</span><span>="getBlogs_Click" />
<</span><span>Button </span><span>x</span><span>:</span><span>Name</span><span>="changeText" </span><span>Content</span><span>="Change Text" </span><span>Margin</span><span>="0,10,0,0"
</span><span>Width</span><span>="150" </span><span>Click</span><span>="changeText_Click" />
</</span><span>StackPanel</span><span>>
</</span><span>StackPanel</span><span>></span>接下来为“Get Blogs”按钮添加Click事件,getBlogs_Click与以往Click事件不同之处就在于多了一个async关键字,看到Async就说明下面的内容要通过异步方法来实现。方法中通过SyndicationClient.RetrieveFeedAsync获取博客内容,并通过await操作符告知应用要调用异步操作,且不影响用户正常交互。如果不使用的异步调用的话,用户只能等待所有博客内容加载完成后,才能继续使用该应用。
<span>private async void </span><span>getBlogs_Click(</span><span>object </span><span>sender, </span><span>RoutedEventArgs </span><span>e)
{
waitingText.Text = </span><span>"Loading Blogs..."</span><span>;
</span><span>SyndicationClient </span><span>client = </span><span>new </span><span>SyndicationClient</span><span>();
client.BypassCacheOnRetrieve = </span><span>true</span><span>;
</span><span>Uri </span><span>feedUri = </span><span>new </span><span>Uri</span><span>(</span><span>"http://blogs.windows.com/windows/b/bloggingwindows/atom.aspx"</span><span>);
</span><span>try
</span><span>{
</span><span>SyndicationFeed </span><span>feed = </span><span>await </span><span>client.RetrieveFeedAsync(feedUri);
</span><span>ObservableCollection</span><span><</span><span>BlogItem</span><span>> blogData = </span><span>new </span><span>ObservableCollection</span><span><</span><span>BlogItem</span><span>>();
listTitle.Text = feed.Title.Text;
</span><span>foreach </span><span>(</span><span>SyndicationItem </span><span>item </span><span>in </span><span>feed.Items)
{
blogData.Add(</span><span>new </span><span>BlogItem</span><span>()
{
Author = item.Authors[0].Name.ToString(),
PubDate = item.PublishedDate.Year.ToString() + </span><span>"/" </span><span>+
item.PublishedDate.Month.ToString() + </span><span>"/" </span><span>+
item.PublishedDate.Day.ToString(),
Title = item.Title.Text
});
}
blogList.ItemsSource = blogData;
waitingText.Text = </span><span>"Completed!"</span><span>;
}
</span><span>catch </span><span>(</span><span>Exception </span><span>ex)
{
waitingText.Text = </span><span>"Can‘t load the page:" </span><span>+ ex.ToString();
}
}</span>演示
运行程序点击“Get Blogs”按钮,现在应用已经通过异步方式获取Blog内容,这是我们可以点击“Change Text”来验证一下用户是否可以继续使用应该的其他功能。
点击“Get Blogs”后会出现“Loading Blogs…”的字样,说明此事异步调用已经启动。
在获取到博客内容前点击“Change Text”,刚才的文字会变为“Please Waiting…”,说明当异步调用时用户仍然可以与应用进行交互。
异步调用完成后,文字部分又被更新为“Completed!”。
至此,关于异步调用的开发就完成了。本篇内容只是异步调用的一种类型,当然还有许多其他类型的API可以供大家使用,而且包含C#、VB、JS多种语言开发。
源码
原文:http://www.cnblogs.com/lonelyxmas/p/3587908.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!