首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileSavePicker契约实现

FileSavePicker契约实现
EN

Stack Overflow用户
提问于 2012-09-27 15:07:10
回答 1查看 198关注 0票数 0

我已经在我的应用程序中实现了FileSavePicker协定,所以当用户从邮件应用程序中选择一个附件并想要保存到我的应用程序时,OnTargetFileRequested(FileSavePickerUI^sender,TargetFileRequestedEventArgs^e)方法就会被触发...

代码语言:javascript
复制
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 

}

现在,无论我创建了什么文件,需要上传到我的metro app....but,我都面临着一个问题,就是延迟->完成...在将文件上传到我的应用程序后,是否需要写入延迟->完成()或以上的延迟->完成语句是否正确。??...

但是,当我在上传文件后使用“延迟”->“完成”时,上传的文件总是0字节...

如果我像上面的代码所示在createFileAsync()中使用了deferral->complete,那么这个文件就不会得到uploaded........please的帮助...

你能告诉我这是正确的方法吗?

先谢谢你...

EN

回答 1

Stack Overflow用户

发布于 2012-09-27 16:29:10

你应该在你的方法中的最后一个await调用之后调用deferral->Complete() -- defferal的目的是通知调用者,即使被调用的方法返回了,仍然有异步操作在进行中。一旦延迟被调用完成,那么调用者就知道一切都完成了。

因此,您可能应该在上传文件或将文件复制到缓存后调用deferral->Complete()。如果没有传输字节,请确保正确传输文件-您必须使用OpenReadAsync打开原始文件,并将流复制到内存流(不建议用于大文件),或者缓存文件或其他位置,然后将其发送。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12615918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档