task<T>().then()による列挙

公開:2012-03-19 18:41
更新:2020-02-15 04:37
カテゴリ:winrt,c++/cx,xaml,windows

デバイス列挙サンプル中のDeviceInformationの列挙はtask<T>で行っていたので真似してみた。これだとすっきり書ける。ついでにデータバインドもやってみた。ソースはほとんどコピペ状態。


FakeDAW::FakeDAW()
{
    InitializeComponent();
    task&lt;DeviceInformationCollection^&gt;(
    DeviceInformation::FindAllAsync(DeviceClass::AudioRender))
    .then([this](DeviceInformationCollection^ col)
    {
        for(DeviceInformation^ i : col)
        {
            DisplayDeviceInterface(i);
        }
    }
    );
}

void FakeDAW::DisplayDeviceInterface(DeviceInformation^ deviceInterface)
{
    String^ id = "Id: " + deviceInterface-&gt;Id;
    String^ name = deviceInterface-&gt;Name;
    String^ isEnabled = (deviceInterface-&gt;IsEnabled) ? "IsEnabled: True" : "IsEnabled: False";

    auto item = ref new InterfaceDisplayItem(id, name, isEnabled);

    DeviceListBox_-&gt;Items-&gt;Append(item); 

    task&lt;DeviceThumbnail^&gt;(deviceInterface-&gt;GetThumbnailAsync())
        .then([item](DeviceThumbnail^ thumbnail)
    {
        item-&gt;Thumbnail-&gt;SetSource(thumbnail);
    });

    task&lt;DeviceThumbnail^&gt;(deviceInterface-&gt;GetGlyphThumbnailAsync())
        .then([item](DeviceThumbnail^ glyphThumbnail)
    {
        item-&gt;GlyphThumbnail-&gt;SetSource(glyphThumbnail);
    });
}

実行結果は下の画面。リストボックスにデータバインドでデバイスのサムネイルビットマップとデバイス名を表示している。

まだまだ手探りの状態だ。