我正在编写一个小的WinRT程序来异步创建一个文件夹和一个文件。简化的代码如下:
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。例如,我有一个文本块,在每个步骤中我都想更新它以显示不同的文本,例如:
Create Folder Succeed...
Create File Succeed...
Write File Succeed...
等。
如何从Async任务访问UI元素?这样做的最佳做法是什么?
答案 0 :(得分:2)
您需要从UI线程更新UI。我刚才写了一篇关于从不同类型的Windows Phone应用程序获取UI线程的帖子,它也应该适用于Windows RT应用程序:http://robwirving.com/2013/07/17/guide-to-getting-to-the-ui-thread-for-any-type-of-windows-phone-8-app/
如果您正在使用Windows Xaml,您应该能够从CoreWindow对象获取Dispatcher并使用调度程序的RunAsync方法运行lambda。
如果你试图从WinRT组件到达UI线程,那就更难了,但我在这里有一个方法:http://robwirving.com/2014/06/02/getting-to-the-ui-thread-from-a-windows-phone-winrt-component/
答案 1 :(得分:1)
您可以捕获UI元素变量并在lambda体中更新它。