Windows 8应用开发之异步调用

简介:

不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使得比较复杂的逻辑操作由异步进行,用户仍然可以继续使用应用,不会有无响应的等待情况出现。

本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程。首先我们来编写一个“Get Blogs”按钮,点击它可以从Windows Blog中获取博客列表。当然获取博客信息的过程是由异步进行的,这个过程中为了测试用户仍然可以与应用交互,我们再设计一个“Change Text”用来修改waitingText的内容。

代码

 
 
  1. <StackPanel Orientation="Horizontal" Grid.Row="1"> 
  2.     <StackPanel> 
  3.         <TextBlock x:Name="listTitle" Height="40" Width="200"  
  4.                    Style="{StaticResource BasicTextStyle}"/> 
  5.         <ListView x:Name="blogList" ItemTemplate="{StaticResource listTemplate}" 
  6.                   VerticalAlignment="Top" HorizontalAlignment="Left" Height="550" 
  7.                   Margin="50,10,0,0" Width="650"/> 
  8.     </StackPanel> 
  9.     <StackPanel Orientation="Vertical" VerticalAlignment="Top"> 
  10.         <TextBlock x:Name="waitingText" Height="40" Width="200"  
  11.                    Style="{StaticResource BasicTextStyle}" /> 
  12.         <Button x:Name="getBlogs" Content="Get Blogs" Width="150" 
  13.                 Click="getBlogs_Click"  /> 
  14.         <Button x:Name="changeText" Content="Change Text" Margin="0,10,0,0"  
  15.                 Width="150" Click="changeText_Click" /> 
  16.     </StackPanel> 
  17. </StackPanel> 

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

 
 
  1. private async void getBlogs_Click(object sender, RoutedEventArgs e) {      
  2. waitingText.Text = "Loading Blogs...";      
  3.  SyndicationClient client = new SyndicationClient();     
  4.  client.BypassCacheOnRetrieve = true;      
  5.  Uri feedUri = new Uri("http://blogs.windows.com/windows/b/bloggingwindows/atom.aspx");      
  6.  try     
  7.  {        
  8.   SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);      
  9.     ObservableCollection<BlogItem> blogData = new ObservableCollection<BlogItem>();                   
  10. listTitle.Text = feed.Title.Text;                 
  11.   foreach (SyndicationItem item in feed.Items)      
  12.     {             blogData.Add(new BlogItem()        
  13.       {                 Author = item.Authors[0].Name.ToString(),          
  14.         PubDate = item.PublishedDate.Year.ToString() + "/" +                  
  15.          item.PublishedDate.Month.ToString() + "/" +                        
  16.    item.PublishedDate.Day.ToString(),           
  17.        Title = item.Title.Text       
  18.        });         }      
  19.     blogList.ItemsSource = blogData;                 
  20.  waitingText.Text = "Completed!";  
  21.     }    
  22.   catch (Exception ex)  
  23.     {      
  24.     waitingText.Text = "Can't load the page:" + ex.ToString();     } } 

演示

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

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

image

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

image

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

image

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

image

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

目录
相关文章
|
4月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
215 11
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
324 0
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
522 4
|
安全 C# 开发者
Windows Forms 应用开发:一分钟浅谈
本文将带领您从零开始,逐步掌握使用 C# 进行 Windows Forms 开发的技巧,包括创建首个应用、处理常见问题及优化方法。首先介绍如何搭建环境并编写基础代码,接着深入探讨控件使用与布局管理,解决控件重叠和响应式布局难题。最后讲解事件处理与多线程技术,确保长时间任务不阻塞界面,并安全更新 UI 状态,助您开发流畅的应用程序。
619 63
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
430 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
682 4
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
1596 3
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
456 1
|
XML 缓存 前端开发
Electron-builder 是如何打包 Windows 应用的?
本文首发于微信公众号“前端徐徐”,作者徐徐深入解析了 electron-builder 在 Windows 平台上的打包流程。文章详细介绍了 `winPackager.ts`、`AppxTarget.ts`、`MsiTarget.ts` 和 `NsisTarget.ts` 等核心文件,涵盖了目标创建、图标处理、代码签名、资源编辑、应用签名、性能优化等内容,并分别讲解了 AppX/MSIX、MSI 和 NSIS 安装程序的生成过程。通过这些内容,读者可以更好地理解和使用 electron-builder 进行 Windows 应用的打包和发布。
1030 0