我已在我的应用中实现了FileSavePicker合约,因此当用户从邮件应用中选择附件并希望保存到我的应用时,OnTargetFileRequested(FileSavePickerUI ^ sender,TargetFileRequestedEventArgs ^ e)方法会被触发....
OnTargetFileRequested(FileSavePickerUI^ sender, TargetFileRequestedEventArgs^ e)
{
auto request = e->Request;
auto deferral = request->GetDeferral();
create_task(ApplicationData::Current->LocalFolder->CreateFileAsync(sender->FileName, CreationCollisionOption::GenerateUniqueName)).then([request, deferral](StorageFile^ file)
{
// Assign the resulting file to the targetFile property indicates success
request->TargetFile = file;
// Complete the deferral to let the Picker know the request is finished.
deferral->Complete();
return file;
}.then([=](StorageFile^ file)
{
//here i will upload file to my metro app
}
现在无论我创建的文件是什么,我需要上传到我的地铁应用....但我面临延期问题 - >完成...是否延期 - >完成()完全需要写后将文件上传到我的应用程序或延期 - >完整语句上面是正确的。?? ...
但是当我使用deferral->完成上传文件后,总是会上传0个字节的文件......
如果我在createFileAsync()中使用deferral-> complete,如上面的代码所示那么文件没有上传........请帮助我...
你能告诉我这是正确的方法吗?..
提前感谢...
答案 0 :(得分:0)
你应该在你的方法中的最后一次await调用之后调用deferral-> Complete() - defferal的目的是通知调用者,即使被调用的方法返回,仍然有异步操作正在进行中。一旦延迟被称为完成,则调用者知道一切都已完成。
因此,您应该在上传文件后或将文件复制到缓存后调用deferral-> Complete()。如果没有传输字节,请确保正确传输文件 - 您必须使用OpenReadAsync打开原始文件并将流复制到您的内存流(不推荐用于大文件),或者缓存文件或某处,然后发送