0

私の現在のプロジェクトでは、最近の問題があり、それを理解するのに苦労しています:

concurrency::create_task(BPClient->ReadAnswer()).then([this](Windows::Foundation::Collections::IVector<unsigned char>^ Vec) {
            WSS::InMemoryRandomAccessStream^ imras = ref new WSS::InMemoryRandomAccessStream();
            WSS::DataWriter^ dw = ref new WSS::DataWriter(imras->GetOutputStreamAt(0));
            for(long long i = 0; i < Vec->Size; i++){
                dw->WriteByte(Vec->GetAt(i));
            }
            concurrency::create_task(dw->StoreAsync()).then([this, imras](unsigned int Count){
                Windows::UI::Xaml::Media::Imaging::BitmapImage^ bi = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();
                Image^ img = ref new Image();
                bi->SetSource(imras);
                img->Source = bi;
                img->Width = 400;
                img->Height = 400;
                img->SetValue(Grid::ColumnProperty, 2);
                concurrency::create_task(coredisp->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([=]() {
                    this->MainGrid->Children->Append(img);
                })));
            });
        });

これは正常に機能し、期待される結果が得られます。しかし、私がそれを

concurrency::create_task(BPClient->ReadAnswer()).then([this](Windows::Foundation::Collections::IVector<unsigned char>^ Vec) {
            WSS::InMemoryRandomAccessStream^ imras = ref new WSS::InMemoryRandomAccessStream();
            WSS::DataWriter^ dw = ref new WSS::DataWriter(imras->GetOutputStreamAt(0));
            for(long long i = 0; i < Vec->Size; i++){
                dw->WriteByte(Vec->GetAt(i));
            }

            concurrency::create_task(dw->StoreAsync()).wait(); //consider this line
            Windows::UI::Xaml::Media::Imaging::BitmapImage^ bi = ref new Windows::UI::Xaml::Media::Imaging::BitmapImage();
            Image^ img = ref new Image();
            bi->SetSource(imras);
            img->Source = bi;
            img->Width = 400;
            img->Height = 400;
            img->SetValue(Grid::ColumnProperty, 2);
            concurrency::create_task(coredisp->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([=]() {
                this->MainGrid->Children->Append(img);
            }))).wait();
        });

concurrency::create_task最終的に、最後の-callに無効なパラメーターが渡されたというエラーが表示されます。

ここで実際に何が起こっているのですか?concurrency::task::thenとを混在させることはできませんconcurrency::task::waitか? concurrency::task::wait代わりにを使用する場合と同様のタスク チェーンを作成していると思いますconcurrency::task::then
ありがとうございました

4

1 に答える 1