C++ 从WinRT中的异步任务lambda更新UI
我正在写一个小WinRT程序来异步创建一个文件夹和一个文件。简化代码如下所示:C++ 从WinRT中的异步任务lambda更新UI,c++,wpf,asynchronous,windows-runtime,c++-cx,C++,Wpf,Asynchronous,Windows Runtime,C++ Cx,我正在写一个小WinRT程序来异步创建一个文件夹和一个文件。简化代码如下所示: auto createFolderOp = ApplicationData::Current->LocalFolder->CreateFolderAsync(L"DummyFolder", CreationCollisionOption::OpenIfExists); create_task(createFolderOp).then([](task<StorageFolder ^> fold
auto createFolderOp = ApplicationData::Current->LocalFolder->CreateFolderAsync(L"DummyFolder", CreationCollisionOption::OpenIfExists);
create_task(createFolderOp).then([](task<StorageFolder ^> folder)
{
StorageFolder ^tempFolder;
tempFolder = uploadFolder.get();
return tempFolder->CreateFileAsync(L"DummyFile.txt", CreationCollisionOption::ReplaceExisting);
}).then([] (task<StorageFile ^> dummyFile)
{
StorageFile ^file;
file = dummyFile.get();
FileIO::WriteTextAsync(file, L"Dummy Content");
});
等等
如何从异步任务访问UI元素?执行此操作的最佳实践是什么?您只需捕获UI元素变量并在lambda主体中更新它。您只需捕获UI元素变量并在lambda主体中更新它。您需要从UI线程更新UI。我不久前写了一篇关于从不同类型的Windows Phone应用程序访问UI线程的帖子,它也应该适用于Windows RT应用程序: 如果您使用的是Windows Xaml,那么您应该能够从CoreWindow对象获取Dispatcher,并使用Dispatcher的方法运行lambda
如果您试图从WinRT组件访问UI线程,那么这有点困难,但我这里有一个方法:您需要从UI线程更新UI。我不久前写了一篇关于从不同类型的Windows Phone应用程序访问UI线程的帖子,它也应该适用于Windows RT应用程序: 如果您使用的是Windows Xaml,那么您应该能够从CoreWindow对象获取Dispatcher,并使用Dispatcher的方法运行lambda
如果您试图从WinRT组件访问UI线程,那么这有点困难,但我有一个方法:
这样做的最佳实践是什么?
-阅读。这样做的最佳实践是什么?
-阅读。我想我会对此进行一点扩展。在任务继续中,可以通过对象或指针捕获变量。您总是可以通过将传递给您的延续。然后([此](…)
。我注意到intellisense并不总是关注UI元素,但如果您键入名称并在名称后面加上->
,它通常会流行起来。旁注:我想我会对此进行一点扩展。在任务继续中,您可以通过对象或指针捕获变量。您可以始终传递这
将通过继续。然后([这](…)
。我注意到intellisense并不总是能够识别UI元素,但如果您键入名称并在其后面加上->
,它通常会流行起来。旁注:
Create Folder Succeed...
Create File Succeed...
Write File Succeed...