Windows 8应用开发之异步调用

开发 后端
本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程。希望对大家有所帮助。

 不论是桌面客户端还是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> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

接下来为“Get Blogs”按钮添加Click事件,getBlogs_Click与以往Click事件不同之处就在于多了一个async关键字,看到Async就说明下面的内容要通过异步方法来实现。方法中通过SyndicationClient.RetrieveFeedAsync获取博客内容,并通过await操作符告知应用要调用异步操作,且不影响用户正常交互。如果不使用的异步调用的话,用户只能等待所有博客内容加载完成后,才能继续使用该应用。

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();     } } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

演示

运行程序点击“Get Blogs”按钮,现在应用已经通过异步方式获取Blog内容,这是我们可以点击“Change Text”来验证一下用户是否可以继续使用应该的其他功能。

点击“Get Blogs”后会出现“Loading Blogs…”的字样,说明此事异步调用已经启动。

[[101311]]

在获取到博客内容前点击“Change Text”,刚才的文字会变为“Please Waiting…”,说明当异步调用时用户仍然可以与应用进行交互。

[[101312]]

异步调用完成后,文字部分又被更新为“Completed!”。

image

至此,关于异步调用的开发就完成了。本篇内容只是异步调用的一种类型,当然还有许多其他类型的API可以供大家使用,而且包含C#、VB、JS多种语言开发。

image

原文链接:http://www.cnblogs.com/gnielee/archive/2012/10/28/windows9-app-develop-async-programming.html

 

责任编辑:彭凡 来源: 博客园
相关推荐

2010-02-22 13:28:05

WCF异步调用

2009-08-21 11:02:55

C#异步调用

2009-10-20 16:48:30

C#委托

2009-12-21 14:10:26

WCF异步调用

2009-11-09 10:50:30

WCF异步调用

2009-07-01 13:58:00

JavaScript异

2022-11-03 15:37:52

NAPI开发三方库移植

2009-11-06 15:54:15

WCF异步调用

2009-07-01 14:31:01

JavaScript异

2009-07-01 14:23:46

JavaScript异

2009-08-21 11:24:16

C#异步调用

2009-07-01 14:37:14

JavaScript异

2009-07-01 14:05:23

JavaScript异

2009-12-07 14:26:47

WCF异步调用

2011-03-02 08:57:22

jQueryJavaScript

2009-12-07 14:35:42

WCF异步调用

2010-01-11 17:24:19

VB.NET异步调用

2021-03-29 09:26:44

SpringBoot异步调用@Async

2024-07-31 15:57:41

2024-10-15 10:28:43

点赞
收藏

51CTO技术栈公众号