3

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

我正在使用适用于 WP8 的 Live Connect SDK v5.3。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

谢谢!

4

2 回答 2

0

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

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

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

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

于 2015-03-02T00:13:48.460 回答
0

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

您可能可以在停用期间执行此操作,但这将是一个推动,因为时间尺度是相同的。

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

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

希望这可以帮助

于 2013-07-04T10:16:41.697 回答