CopyAsync 永远不会运行完成

时间:2021-03-18 10:40:30

标签: uwp c++-cx

我正在将文件从 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 循环中。我可以执行一个变通方法来检查文件是否达到了正确的大小,然后跳出循环,但这是次优的。

我做错了吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试在 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

答案 1 :(得分:0)

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