2015年11月30日月曜日

スレッドからUIコントロールを操作する

ワーカースレッドからUIコントロールを操作する方法。
WindowsForm のときは、Invokeで行っていたが、
UWPでは Dispatcher.RunAsync を使う。

例)ボタンをクリックされた時スレッドを作成してそのボタンを一瞬光らせる。

ボタンのクリックイベントで
    Task.Run(()=>ButtonFlash(button));
としてメソッドをスレッドとしてコールする。
private async void ButtonFlash(Button btn)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
        btn.Background = new SolidColorBrush(Colors.Aqua);
    });

    // Delay は RunAsync の外で行う必要がある
    await Task.Delay(TimeSpan.FromSeconds(0.1));

    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
        btn.Background = new SolidColorBrush(Colors.Gray);
    });
}

0 件のコメント:

コメントを投稿