问题描述
我正在将文件从 U 盘复制到我的应用程序中的 LocalState 文件夹。因为它是 UWP,我正在使用
Windows::Storage::StorageFolder^ removeableDevices = Windows::Storage::KNownFolders::RemovableDevices;
获取U盘路径等
auto copyTask = create_task(virtualFile->copyAsync(targetFolder,outputFilenameUwp,Windows::Storage::NameCollisionoption::GenerateUniqueName));
while (!copyTask.is_done())
{
Sleep(100);
}
上述方法运行到文件完全复制到LocalState但任务从未完成的点。它只是永远留在 while 循环中。我可以执行一个变通方法来检查文件是否达到了正确的大小,然后跳出循环,但这是次优的。
我做错了吗?
提前致谢!
解决方法
您可以尝试在 copyTask
上使用 task::then 并提供一个将在异步操作完成时调用的 lambda。
请参考以下代码:
auto copyTask =
create_task(file->CopyAsync(folder,"test.jpg",NameCollisionOption::GenerateUniqueName));
copyTask.then([](StorageFile^ copiedFile) { //This lambda will be invoked when the copyTask completes
String^ name = copiedFile->Name;
});
copyTask.then
中 lambda 的输入参数是 copyTask
操作在任务完成时产生的结果。有关使用任务使用异步操作的更多信息,您可以参考 document。
事实证明我太不耐烦了,一旦文件被复制,就需要进行一些内务处理。完成此操作后,将设置正确的状态。