Windows运维之应用开发异步调用
诗诗 2018-03-19 来源 :网络 阅读 949 评论 0

摘要:本系列Windows 8应用开发将给大家系统的讲解一些 Windows运维的知识,看完这系列文章会让你对Windows运维有更加清晰的理解和运用。

本系列Windows 8应用开发将给大家系统的讲解一些 Windows运维的知识,看完这系列文章会让你对Windows运维有更加清晰的理解和运用。


不论是桌面客户端还是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("//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…”的字样,说明此事异步调用已经启动。

Windows运维之应用开发异步调用

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

Windows运维之应用开发异步调用

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

Windows运维之应用开发异步调用

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

Windows运维之应用开发异步调用

希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!


本文由 @诗诗 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程