将 .NET 任务作为 WinRT 异步操作公开

在博文深入探究 Await 和 WinRT 中,我们讨论了 C# 和 Visual Basic 中新增的 async 和 await 关键字,以及如何使用它们执行 Windows 运行时 (WinRT) 异步操作。 在 .NET 基本类库 (BCL) 的辅助下,您还可以使用这些关键字来设计异步操作,然后通过 WinRT 公开这些操作,以使其适用于使用其他语言构建的组件。在本篇博文中,我们将探究如何实现。(有关使用 C# 或 Visual Basic 实施 WinRT 组件的完整详细信息,请参阅使用 C# 和 Visual Basic 创建 Windows 运行时组件。) 首先,我们来回顾一下 WinRT 中异步 API 的概况。 WinRT 异步接口 WinRT 具有多个与异步操作相关的接口。第一个要说的就是 IAsyncInfo,每个有效的 WinRT 异步操作都会实施该接口。它可提供异步操作的所有常用功能,包括操作的当前状态、操作失败时的错误信息、操作 ID 以及操作请求取消的能力: public interface…

0

深入探究 WinRT 和 await

在最近发布的使用 Windows 运行时中异步性来始终保持应用程序能够快速流畅地运行这篇博文中,包含了一些如何在 C# 和 Visual Basic 中使用 await 关键字的示例,允许开发人员在使用 WinRT 异步操作的同时,保持和推导良好的控制流。 在接下来的博文中,我将更加深入地介绍 await 在 WinRT 中的工作原理。这些知识将帮助您更轻松地推导使用 await 的代码,进而帮助您编写更出色的 Metro 风格应用程序。 首先,我们先来审视一下没有 await 的情况。 基础知识回顾 WinRT 中的所有异步功能全部源自同一个接口:IAsyncInfo。 public interface IAsyncInfo{ AsyncStatus Status { get; } HResult ErrorCode { get; } uint Id { get; } void Cancel(); void Close();} WinRT 中的每个异步操作都需要实施此接口,该接口可提供执行异步操作所需的基本功能,查询其标识和状态,并请求其取消。但该特定接口缺少对异步操作来说无疑是至关重要的功能:当操作完成时,通过回调通知监听器。该功能有意地划分到了四个依赖 IAsyncInfo 的其他接口中,而 WinRT 中的每个异步操作都需要实施以下四个接口之一:…

0

最大程度地利用像素,适应视图状态的变更

在 Windows 8 中,您的应用程序将在各种屏幕尺寸和不同视图状态下运行。用户可能将应用程序分屏显示于 25 英寸的台式计算机显示器的一侧,也可能将其全屏显示于 10 英寸的宽屏平板设备。但是无论是哪种情形,您都希望您的应用程序能够充分利用可用空间。在本篇博文中,我将向您展示如何在代码中跟踪您应用程序的当前尺寸和视图状态,并为您提供一些有关在 Windows 8 Consumer Preview 中编写应用程序的技巧,从而让您轻松应对屏幕尺寸和视图状态的变更。 在 //build/ 大会上,我曾向您介绍了如何为不同的屏幕应用场景而设计应用程序(例如,请观看视频 XAML talk 或 HTML talk)。此外,最近我们也在 Building Windows 8 博客中与您分享了一些有关屏幕缩放的研究内容和设计想法。通常情况下,您可使用纯标记来适应屏幕尺寸的变更,而无需编写显示代码。但有时您需要跟踪应用程序处于何种视图状态(即确定应用程序是处于纵向、全屏、填充抑或辅屏模式),并编写代码做出相应响应。例如,如果您正在使用一项 HTML ListView 来显示项目,那么您可能希望在全屏模式时使用 GridLayout,而在辅屏模式时使用 ListLayout。(如下图所示。)而对于 XAML,您可能希望在 GridView 控件和 ListView 控件间进行类似的切换。为明确应如何进行这一操作,让我们一起来看看应如何在代码中检测尺寸调整和视图状态的变更。 左侧全屏视图状态中设置了网格布局 (HTML) 或 GridView 控件 (XAML): 右侧辅屏视图状态中设置了列表布局 (HTML) 或 ListView 控件 (XAML)。 尺寸调整和视图状态变更的基础知识 对于使用 XAML 和 HTML 编写的 Windows 8…

0