2017年01月
[C#] async/await対応の非同期メソッド
手っ取り早い方法はTaskクラスを使う。
public Task<int> TestAsync()
{
return Task.Run<int>(async () =>
{
// ↓このループは時間のかかる処理のつもり
for (int i = 0; i < 10; i++)
{
Debug.WriteLine(i);
await Task.Delay(1000);
}
return 123;
});
}
private async void button_Click(object sender, RoutedEventArgs e)
{
int ret = await TestAsync();
await new MessageDialog(ret.ToString()).ShowAsync();
}
詳しくは、
連載:C# 5.0&VB 11.0新機能「async/await非同期メソッド」入門(最終回):第3回 非同期メソッドの内部実装とAwaitableパターンの独自実装 (2/2) - @ITに書かれている。
実際のところは、時間のかかる処理は別スレッドで動かすと思うんでTask.Runを使う方法でいいと思う。
[C#] 拡張メソッド
クラスの継承とかせずに見かけ上メソッドを追加する機能だ。見かけ上ってのは使う側のコードがインスタンスメソッドを呼ぶときと同じように書けるとういこと。拡張メソッド中ではプライベートなメンバが使えない。
stringにHoge()と言うメソッドを追加してみよう。(なんかいい感じの追加したいメソッドが思い浮かばなかった(^^;))
拡張メソッドの最初の引数に拡張したいクラスと引数名、その頭にthisを付けておく。
public static class ExtensionString
{
public static String Hoge(this String str)
{
return "###" + str;
}
}
使う側は普通にインスタンスメソッドを呼ぶのと同じようにする。
string str = "あいうえお";
Debug.WriteLine(str.Hoge());
この拡張メソッドが有効な範囲は同じネームスーペスで違う場合は、usingで指定しておくと使えるようになる。
UWPでWin2Dを使ってオフスクリーンに描画する - かずきのBlog@hatena(リンクのみ)
[UWP] メッセージボックス
メッセージボックスはMessageDialogクラスで次にように使う。
private async void button_Click(object sender, RoutedEventArgs e)
{
await new MessageDialog("こんにちは!", "タイトル").ShowAsync();
}

OK、キャンセルのようなボタンがあるメッセージボックスはContentDialogクラスを使う。
private async void button1_Click(object sender, RoutedEventArgs e)
{
var dialog = new ContentDialog();
dialog.Content = "どう?";
dialog.PrimaryButtonText = "OK";
dialog.SecondaryButtonText = "キャンセル";
var ret = await dialog.ShowAsync();
if(ret == ContentDialogResult.Primary) {
Debug.WriteLine("OK!!!!");
}
}
