Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关闭WP8应用程序后,使用BackgroundUploadAsync将文件上载到SkyDrive_C#_Windows Phone 8_Windows Phone_Onedrive_Live Connect Sdk - Fatal编程技术网

C# 关闭WP8应用程序后,使用BackgroundUploadAsync将文件上载到SkyDrive

C# 关闭WP8应用程序后,使用BackgroundUploadAsync将文件上载到SkyDrive,c#,windows-phone-8,windows-phone,onedrive,live-connect-sdk,C#,Windows Phone 8,Windows Phone,Onedrive,Live Connect Sdk,因此,我制作了一个简单的WindowsPhone8应用程序,将文本文件上传到用户的SkyDrive帐户。当我的应用程序在前台运行时,我的代码工作正常,但当我尝试在应用程序关闭时上载文本文件时,它似乎不起作用 我正在为WP8使用Live Connect SDK v5.3。 SDK链接: 我正在使用这段代码在我的应用程序关闭时进行后台上传(当用户点击手机上的“后退按钮”时: protected override void OnBackKeyPress(CancelEventArgs e) {

因此,我制作了一个简单的WindowsPhone8应用程序,将文本文件上传到用户的SkyDrive帐户。当我的应用程序在前台运行时,我的代码工作正常,但当我尝试在应用程序关闭时上载文本文件时,它似乎不起作用

我正在为WP8使用Live Connect SDK v5.3。 SDK链接:

我正在使用这段代码在我的应用程序关闭时进行后台上传(当用户点击手机上的“后退按钮”时:

protected override void OnBackKeyPress(CancelEventArgs e)
{
    SaveSkyDriveData();
    base.OnBackKeyPress(e);
}

public async Task SaveSkyDriveData()
{
   var res = await client.BackgroundUploadAsync("me/skydrive", new Uri("/shared/transfers/MyData.txt", UriKind.RelativeOrAbsolute), OverwriteOption.Overwrite);
}
你知道为什么这个代码在应用程序关闭时不起作用吗?我读过SDK,它说即使在应用程序被关闭后也应该起作用。下面是在后台上传文件的SDK链接:


谢谢!

在WP中关闭应用程序期间,您无法上载文件,因为在关闭应用程序之前,您只有大约10秒的时间保存状态

您可能可以在取消激活期间执行此操作,但这将是一个推送,因为时间尺度是相同的

更好的解决方案是有一个后台任务(计划任务),它运行并检查要上传的文件,并定期这样做

根据您的使用情况,另一种选择是使用parse SDK,而不是上传到SkyDrive,除非有特定原因需要将文件托管在SkyDrive上


希望这有助于恢复一个古老的线程,这是因为您没有等待异步任务吗

protected override **async** void OnBackKeyPress(CancelEventArgs e)
{
    **await** SaveSkyDriveData();
    base.OnBackKeyPress(e);
}
编译器应该警告您没有任何东西在等待任务。。。 所以下游没有人知道有正在进行的工作?所以任何启动的异步工作可能都不会在应用程序关闭之前完成


如果这是相关的,还有其他关于同步等待的答案,比如使用
Task.Run(()=>SaveSkyDriveData()).Wait();
要使异步同步,您是否订阅了文档中所述的所有事件?“1.在初始化LiveConnectClient变量的代码中,声明BackgroundUploadCompleted事件的处理程序…然后调用AttachPendingTransfers方法,该方法检查在应用程序的前一个实例中启动的挂起的后台文件传输"或者你也可以尝试一下,这样我就被那个文档弄糊涂了。这些事件对我来说都不可用。经过一些挖掘,他们似乎将这些事件用于仅针对WP8的项目。如果我创建了一个针对WP7.1的新项目,那么这些事件就可用了。也许这与针对WP8的新异步/等待模型有关?Alte实际上,我尝试了同步阻止OnBack方法——这是可行的……但我真的希望在上传过程中关闭我的应用程序。谢谢!你必须以WP8为目标吗?或者你能以WP7为目标吗。还有很多WP7设备。我建议的链接应该可以作为替代。有趣的是,你从哪里获得这些信息的(关于关闭期间无法上传文件)?如果你查看SDK链接(此处:),它会说,我引用“对于Windows Phone 7.5应用程序,即使启动上传的应用程序已暂停或退出,你也可以上传文件。下面是如何操作的。”-它列出了我用来上传的完全相同的方法。如果你说的是真的,那么我想知道为什么SDK中会有这样的内容。谢谢你的回答!后台任务是框架的一部分,因此你不需要控制它们,但你确实需要时间来启动这个过程。只是没有足够的时间结束,但我会如果必须在应用程序关闭/挂起时进行ld测试,则使用“停用”。不过,最好的解决方案是在后台任务中完全脱机进行测试。SDK中有这样的内容,指出这是一个框架过程,您的应用程序可以与之集成。