CopyAsync 永远不会运行完成

问题描述

我正在将文件从 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

,

事实证明我太不耐烦了,一旦文件被复制,就需要进行一些内务处理。完成此操作后,将设置正确的状态。