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