在WP8应用程序关闭后,使用BackgroundUploadAsync将文件上传到SkyDrive

时间:2013-07-04 04:25:35

标签: c# windows-phone-8 windows-phone onedrive live-connect-sdk

所以我制作了一个简单的Windows Phone 8应用程序,它将文本文件上传到用户的SkyDrive帐户。我的应用程序在前台运行时,我的代码工作正常,但是当我的应用程序关闭时,当我尝试上传文本文件时,它似乎无法正常工作。

我正在使用Live Connect SDK v5.3 for WP8。 SDK链接:http://msdn.microsoft.com/en-us/library/live/hh826550.aspx

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

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链接:http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files

谢谢!

2 个答案:

答案 0 :(得分:0)

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

您可以在去激活期间执行此操作,但由于时间尺度相同,这将是一个推动。

更好的解决方案是让后台任务(计划任务)运行并检查要上传的文件,并定期执行。

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

希望这有帮助

答案 1 :(得分:0)

要恢复一个古老的线程,这是因为你没有等待你的异步任务吗?

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

编译器应该警告你没有任何东西在等待任务...... 所以下游没有人知道正在进行的工作?所以在应用程序关闭之前,任何启动的异步工作可能都没有完成。

如果相关,还有其他关于同步等待的答案,比如使用Task.Run(() => SaveSkyDriveData()).Wait();使异步事物同步,