.NET タスクを WinRT 非同期処理として公開する

「WinRT と await を掘り下げる」というブログ記事では、C# と Visual Basic の新しい async キーワードと await キーワードについてや、それらのキーワードを使って Windows ランタイム (WinRT) 非同期処理を利用する方法について説明しました。 .NET 基本クラス ライブラリ (BCL) の助けを借りると、それらのキーワードを使って非同期処理を開発し、別の言語で構築された他のコンポーネントに WinRT をとおしてその処理を公開して利用することができます。この記事では、その方法について考えます (C# や Visual Basic を使って WinRT コンポーネントを実装する詳しい方法については、「C# と Visual Basic で Windows ランタイム コンポーネントを作成する」(英語) をご覧ください)。 まず、WinRT における非同期 API の形を見てみましょう。 WinRT 非同期インターフェイス WinRT には、非同期処理に関連するいくつかのインターフェイスがあります。1 つ目は IAsyncInfo で、これはすべての有効な WinRT 非同期処理が実装します。このインターフェイスによって、処理の現在のステータス、失敗した場合は処理のエラー、処理の ID、キャンセルを要求する機能など、非同期処理の一般的な機能を利用することができます。 public interface IAsyncInfo{…

0

WinRT と await を掘り下げる

最近の記事「Windows ランタイムの非同期性により高速で滑らかなアプリにする」では、C# と Visual Basic の await キーワードを使用して、そのままの制御フローを維持しながら、WinRT の非同期操作を使用できることを示すサンプルをご紹介しました。 この続きの記事では、WinRT で実際に await がどのように機能するかについて、内部を詳しく見ていきます。この知識を身に付けておくと、await を使うコードの動作を理解しやすくなり、結果として、より優れた Metro スタイル アプリを作成できるようにもなります。 手始めに、await を使わない場合について基本を確認しましょう。 基本のおさらい WinRT の非同期性は、すべて IAsyncInfo という 1 つのインターフェイスに基づいています。 public interface IAsyncInfo{ AsyncStatus Status { get; } HResult ErrorCode { get; } uint Id { get; } void Cancel(); void Close();} WinRT におけるすべての非同期操作は、このインターフェイスを実装しています。このインターフェイスは、非同期操作を参照してその ID と状態を問い合わせたり、操作のキャンセルを要求したりするために必要な基本機能を提供します。ただしこのインターフェイスには、非同期処理において最も重要とも言える部分が欠けており、操作の完了をリスナーに通知するコールバックが用意されていません。この機能は、IAsyncInfo を必要とする他の 4 つのインターフェイスに意図的に分離されています。WinRT…

0

ピクセルを最大限に活用する – 表示状態の変更に適応する

Windows 8 のアプリは、さまざまな画面サイズとさまざまな表示状態で実行されます。ユーザーは、25 インチのデスクトップ モニターの側端にアプリをスナップすることもできますし、10 インチのワイドスクリーン タブレットの画面全体をアプリで埋めることも可能です。いずれの場合も、皆さんのアプリが利用可能なスペースを十分に活用することが望まれます。この記事では、アプリの現在のサイズと表示状態をコードで追跡する方法と、画面サイズと表示状態の変更を処理するために Windows 8 Consumer Preview でアプリを記述する方法について、ヒントを示します。 //build/ では、さまざまな画面シナリオに合わせてアプリを設計する方法について説明しました。たとえば、XAML に関する講演 (英語) や HTML に関する講演 (英語) をお聞きください。最近の Building Windows 8 ブログでは、画面のスケーリングの調査と設計に関する私たちの考えを少しお伝えしました。多くの場合、明示的なコードを記述しなくても、純粋なマークアップを使って画面サイズの変更に対応できます。しかし、アプリの表示状態 (英語) を追跡し (つまり、アプリが縦長モード、全画面モード、フィル モード、スナップ モードのどれであるか)、それに応じて反応するようにコードを記述することが必要になる場合があります。たとえば、HTML の ListView を使ってアイテムを表示する場合、次の図に示すように全画面モードでは GridLayout を使いますが、スナップ モードでは ListLayout を使います。XAML の場合、GridView コントロールと ListView コントロールを同様に切り替えることができます。このための方法を理解するために、まずはサイズ変更と表示状態の変更をコードで検出する方法を見てみましょう。 左の全画面表示状態では、GridLayout (HTML) または GridView コントロール (XAML) が使われている。 右のスナップ表示状態では、ListLayout (HTML) または ListView コントロール (XAML)…

0