正如问题所在,是否可以在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;
}
您是否知道如何更改此代码以使其正常工作?
您可以像下面的代码一样调用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
}
}
);
}