S.F. Page

Programming,Music,etc...

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

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

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

void FakeDAW::DisplayDeviceInterface(DeviceInformation^ deviceInterface)
{
    String^ id = "Id: " + deviceInterface->Id;
    String^ name = deviceInterface->Name;
    String^ isEnabled = (deviceInterface->IsEnabled) ? "IsEnabled: True" : "IsEnabled: False";
    
    auto item = ref new InterfaceDisplayItem(id, name, isEnabled);

    DeviceListBox_->Items->Append(item); 

    task<DeviceThumbnail^>(deviceInterface->GetThumbnailAsync())
        .then([item](DeviceThumbnail^ thumbnail)
    {
        item->Thumbnail->SetSource(thumbnail);
    });

    task<DeviceThumbnail^>(deviceInterface->GetGlyphThumbnailAsync())
        .then([item](DeviceThumbnail^ glyphThumbnail)
    {
        item->GlyphThumbnail->SetSource(glyphThumbnail);
    });
}

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

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