Можно ли преобразовать Windows :: Foundation :: IAsyncOperation <T>в Concurrency :: task <T>? - PullRequest
0 голосов
/ 07 мая 2020

Как и в вопросе, возможно ли преобразование между Windows :: Foundation :: IAsyncOperation и Concurrency :: task?

Если да, то как это сделать?

Обновить 1.

Я перехожу с C ++ / CX на C ++ / winrt, и у меня есть следующий конструктор в коде C ++ / CX:

XamlComponentConstructor:XamlComponentConstructor()
{
    InitializeComponent();

    Uri^ uri = ref new Uri(L"URI");
    create_task(StorageFile::GetFileFromApplicationUriAsync(uri))
    .then([this](StorageFile^ file) 
    {
        return Windows::Storage::FileIO::ReadTextAsync(file);
    })
    .then([this](Platform::String^ text) 
    {
        // Text processing 

        x_firstTextBox->Text = var1;
        x_secondTextBox->Text = var2;
    })
}

Основная проблема в том, что нет возможности использовать корутины в конструкторе класса. Таким образом, следующий код не работает:

XamlComponentConstructor:XamlComponentConstructor()
{
    InitializeComponent();

    const auto uri = winrt::Uri(L"URI");
    const auto file { co_await StorageFile::GetFileFromApplicationUriAsync(uri) };
    const auto text { co_await winrt::FileIO::ReadTextAsync(file) };

    //Text processing

    x_firstTextBox->Text = var1;
    x_secondTextBox->Text = var2;
}

Вы знаете, как изменить этот код, чтобы он работал?

1 Ответ

0 голосов
/ 15 мая 2020

вы можете позвонить, как в следующем коде.

XamlComponentConstructor:XamlComponentConstructor()
{
    InitializeComponent(); 
    const auto uri = winrt::Uri(L"URI");
    StorageFile::GetFileFromApplicationUriAsync(uri).Completed(
        [this](auto const& res, AsyncStatus const status)
        {
            StorageFile file {  res.GetResults() };
            winrt::FileIO::ReadTextAsync(file).Completed[this](
                auto const& res, AsyncStatus const status)
                {
                    auto text = res.GetResults();
                    //your code
                }
        }
    ); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...