是否有可能将Windows :: Foundation :: IAsyncOperation 转换为Concurrency :: task ?

问题描述 投票:0回答:1

正如问题所在,是否可以在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;
    })
}

主要问题是在类构造函数中不可能使用corutines。所以下面的代码不起作用:

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;
}

您是否知道如何更改此代码以使其正常工作?

c++-winrt
1个回答
0
投票

您可以像下面的代码一样调用do。

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
                }
        }
    ); 
}
© www.soinside.com 2019 - 2024. All rights reserved.