SQLの窓

2012年10月05日


Windows8 の非同期処理(C#)

Windows8 の非同期処理は、イベント用のコールバックメソッドを用意するのでは無く、同期処理のようにソース行の記述と同じ順序で処理を実行する事ができます。その為に必要な記述方法として、await 演算子とasync キーワード が用意されています。



await 演算子を使うメソッドには、async キーワードでマークされた宣言が必要です。

非同期メソッドの戻り値の型は Task または Task<TResult> です。

最も外側のメソッドで try/catch ブロックを使うと、ネストされている非同期メソッドのエラーをキャッチできます(同期メソッドで例外をキャッチする方法と同様)。


Microsoft の解説ページ

非同期 API の呼び出し
FileOpenPicker.PickSingleFileAsync

// 呼び出し側
private async void Open_Click(object sender, RoutedEventArgs e)
{
	ResetPersistedState();
	ResetSessionState();

	try
	{
		rootPage.NotifyUser("Opening image file...", NotifyType.StatusMessage);

		StorageFile file = await Helpers.GetFileFromOpenPickerAsync();

		await DisplayImageFileAsync(file);

		rootPage.NotifyUser("Loaded file from picker: " + file.Name, NotifyType.StatusMessage);
	}
	catch (Exception err)
	{
		rootPage.NotifyUser("Error: " + err.Message, NotifyType.ErrorMessage);
		ResetSessionState();
		ResetPersistedState();
	}
}

// 非同期メソッド
public static async Task<StorageFile> GetFileFromOpenPickerAsync()
{
	// Attempt to ensure that the view is not snapped, otherwise the picker will not display.
	if (ApplicationView.Value == ApplicationViewState.Snapped && !ApplicationView.TryUnsnap())
	{
		throw new Exception("File picker cannot display in snapped view.");
	}

	FileOpenPicker picker = new FileOpenPicker();
	FillDecoderExtensions(picker.FileTypeFilter);
	picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
	StorageFile file = await picker.PickSingleFileAsync();

	if (file == null)
	{
		throw new Exception("User did not select a file.");
	}

	return file;
}

▲ サンプル全体はこちらから参照できます


【Win8 ストアアプリの最新記事】
posted by lightbox at 2012-10-05 13:52 | Win8 ストアアプリ | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり