我正在编写一个Windows Phone 8应用程序,它使用backgrounduploadasync将文件上传到用户的OneDrive。当它是前台应用程序时,该程序运行良好。我正在使用实时SDK登录按钮输入他们的凭据。我正在使用ResourceIntensiveTask,它应该运行并清理在应用程序运行时没有上传的任何文件。任务运行正常。我得到的唯一错误是当我尝试上传文件时。请记住,几乎所有上传文件的代码都在前台应用程序和后台任务之间共享,因此它应该可以正常工作。唯一的区别是我如何登录OneDrive。现在我正在使用InitializeAsync方法。
// This all works fine
LiveAuthClient auth = new LiveAuthClient("ABC...123"); // my ClientId
Task<LiveLoginResult> t = auth.InitializeAsync(new string[] { "wl.signin wl.skydrive wl.skydrive_update wl.offline_access" });
LiveLoginResult res = t.Result;
_client = new LiveConnectClient(auth.Session);
这是我上传文件的地方。只要我是前台应用程序,此代码就可以正常运行。
// Here is where I get the InvalidOperationException
LiveOperationResult res = await _client.BackgroundUploadAsync(onedriveFolderId,
new Uri("/shared/transfers/" + file.Name, UriKind.Relative),
OverwriteOption.Rename);
当我在前台而不是在ResourceIntensiveTask期间,有什么想法可以解决它的原因吗?这是我得到的例外:
类型&#39; System.InvalidOperationException&#39;的第一次机会异常。发生在mscorlib.ni.dll
无效操作:由于对象的当前状态,操作无效。
堆栈跟踪: 在Microsoft.Phone.BackgroundTransfer.BackgroundTransferRequest.SubmitHelper() 在Microsoft.Phone.BackgroundTransfer.BackgroundTransferRequest.Submit() 在Microsoft.Phone.BackgroundTransfer.BackgroundTransferService.Add(BackgroundTransferRequest request) 在Microsoft.Live.Phone.PhoneBackgroundTransferService.Add(BackgroundTransferRequest request) 在Microsoft.Live.Phone.Operations.BackgroundUploadOperation.d__1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束---
答案 0 :(得分:0)
Live SDK在BackgroundUploadAsync API下使用BackgroundTransfer API。不幸的是,它在后台代理上下文中运行时列为不受支持。 请参阅此文档:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202962(v=vs.105).aspx