天极传媒:
天极网
比特网
IT专家网
52PK游戏网
极客修
全国分站

北京上海广州深港南京福建沈阳成都杭州西安长春重庆大庆合肥惠州青岛郑州泰州厦门淄博天津无锡哈尔滨

产品
  • 网页
  • 产品
  • 图片
  • 报价
  • 下载
全高清投影机 净化器 4K电视曲面电视小家电滚筒洗衣机
您现在的位置: 天极网 > 开发>技术文档>Windows 8 应用程序开发 - 异步调用

Windows 8 应用程序开发 - 异步调用

博客2012-10-30 10:06我要吐槽

  不论是桌面客户端还是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操作符告知应用要调用异步操作,且不影响用户正常交互。如果不使用的异步调用的话,用户只能等待所有博客内容加载完成后,才能继续使用该应用。

   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”来验证一下用户是否可以继续使用应该的其他功能。

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

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

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

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

  源码

  http://sdrv.ms/XCAv6K

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

作者:李敬然的博客责任编辑:Sunny)
请关注天极网天极新媒体 最酷科技资讯
扫码赢大奖
评论
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
办公软件IT新闻整机