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>

     接下来为“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

时间: 2024-07-31 08:10:08

Windows 8 应用开发 - 异步调用的相关文章

Windows 8应用开发之异步调用

 不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使得比较复杂的逻辑操作由异步进行,用户仍然可以继续使用应用,不会有无响应的等待情况出现. 本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程.首先我们来编写一个"Get Blogs"按钮,点击它可以从Windows Blog中获取博客列表.当然获取博客信息的过程是由异步进行的,这个过程中为了测试用户仍然可以与应用交互,我们再

windows phone异步调用api

问题描述 windows phone异步调用api 直接上代码 private void chaxunbutton1_Click(object sender, RoutedEventArgs e) { string s =textBox1.Text; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://300report.jumpw.com/api/getrole?name=" + HttpUti

为Windows应用创建简单的异步调用模式

简介 最近我编写了很多智能客户端应用,总结了一些能够使应用程序在后台调用Web Service时不冻结前台界面的异步调用方法.虽然当前.NET Framework本身已经提供了异步调 用的机制,但我发现在Windows应用中这一机制比较难于把握,因为这时你需要正确的控制用 户界面线程处理. 在这篇文章中,我将教给您一种在Windows应用程序中实现异步调 用Web服务的简单方法,通过这一方法,您不用再考虑后台线程与前台界面线程的交互关系了 . 服务代理 Visual Studio .NET会生成

C# 2.0 匿名方法与 Windows Forms 异步调用

window|异步 C# 2.0 匿名方法大大简化了 Windows Forms 异步调用的实现,我们再也不用手工定义异步委托或者包装类了.例如,在下面的代码示例中,Form1 有一个按钮控件和一个列表控件,在按钮控件的单击事件里,我们新建一个线程,在这个线程中向列表控件添加 10 个项目: public class Form1 : System.Windows.Forms.Form{ private System.Windows.Forms.ListBox listBox1; private

开发自己的Web服务处理程序(以支持Ajax框架异步调用Web服务方法)

当你添加Asp.net AJAX功能到你的Web程序的时候,你需要在Web.config中做一些改变,需要你显式地移除默认的ASMX处理程序并且添加asp.net ajax框架自己的脚本处理器来作为ASMX处理程序.在上一篇异步调用Web服务方法中,我们谈论过,ajax框架的asmx(ScriptHandler)是不支持异步调用Web服务方法的,所以为了让asp.netajax支持异步Web方法调用,我们需要避开该处理器,以提供自定义的处理器来取代它. Asp.netAJAX框架的ASMX处理器

VB.NET中使用代表对方法异步调用

异步 按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然这样,那么为什么要引入异步执行的概念呢? 目录 为什么要使用异步调用实现异步调用的步骤和机理 为什么要使用异步调用(Asynchronous Method Execution) 按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然

Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘

相信未来一段的业余时间,我都要和XNA为伍了.本来想向3D开发的纵深发展 ,但是遇到了一个实际的问题,就是如何在XNA下显示MessageBox和Software Input Panel.干脆先写出来吧,省得大家遇到这问题时抓狂. 按照为数不多的公开文档描述,XNA和Silverlight for Windows Phone应该 是基于同一个.NET Compact Framework的CLR.但是,XNA并没有提供任何用户控 件.MessageBox和软键盘等,也不能直接调用Silverlig

.Net组件程序设计之异步调用

说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和 BeginInvoke(), 要想让自己的组件可以被客户端调用或者是异步调用,这样的设计是合理的,这也是组件异步机制当中的一条 (说句题外话--其实大多数知识都隐藏在我们平时经常见到的对象或者是代码里,只不过是没有去细心的发现) 在.NET中首先就会想到使用委托来进行异步调用,关于委托的定义在 委托与事件一文中已经大概的说过了,文中只是对委托进行了 大概的讲解,并没有对委托的使用来说

Ajax异步调用框架

ajax|异步 /*   作者:welfred   时间:05年8月14日    作用:Ajax异步调用框架  */  var req;  // retrieve XML document (reusable generic function);  // parameter is URL string (relative or complete) to  // an .xml file whose Content-Type is a valid XML  // type, such as tex