我已经在我的应用程序中实现了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
}现在,无论我创建了什么文件,需要上传到我的metro app....but,我都面临着一个问题,就是延迟->完成...在将文件上传到我的应用程序后,是否需要写入延迟->完成()或以上的延迟->完成语句是否正确。??...
但是,当我在上传文件后使用“延迟”->“完成”时,上传的文件总是0字节...
如果我像上面的代码所示在createFileAsync()中使用了deferral->complete,那么这个文件就不会得到uploaded........please的帮助...
你能告诉我这是正确的方法吗?
先谢谢你...
发布于 2012-09-27 16:29:10
你应该在你的方法中的最后一个await调用之后调用deferral->Complete() -- defferal的目的是通知调用者,即使被调用的方法返回了,仍然有异步操作在进行中。一旦延迟被调用完成,那么调用者就知道一切都完成了。
因此,您可能应该在上传文件或将文件复制到缓存后调用deferral->Complete()。如果没有传输字节,请确保正确传输文件-您必须使用OpenReadAsync打开原始文件,并将流复制到内存流(不建议用于大文件),或者缓存文件或其他位置,然后将其发送。
https://stackoverflow.com/questions/12615918
复制相似问题