【发布时间】:2013-08-16 11:33:20
【问题描述】:
我有一个用于检索一些数据的网络客户端的包装器。 WP8 App 正在使用同样的功能,WP8 ScheduledAgent 也在使用。
不知何故,当WP8 App使用该功能时,没有错误并且正确返回。 但是,当 ScheduledAgent 使用该函数时,它错误地出现在下面的粗体代码中。我尝试了尝试捕获,但没有捕获。通过调试器,GetSTringAsync(uri) 已经完成,没有任何异常。该错误似乎仅在将返回任务分配给结果字符串时发生。
我收到的错误是: System.Windows.ni.dll 中出现“System.UnauthorizedAccessException”类型的未处理异常
公共类 HttpClient : WebClient .. 私有异步任务 GetStringAsync(string strUri) { Uri uri = 新的 Uri(strUri); 字符串结果 = string.Empty; 尝试 { 结果 = 等待 GetStringAsync(uri); } 捕捉(例外前) { MessageBox.Show(ex.Message); } 返回结果; } ... 私有任务 GetStringAsync(Uri requestUri) { TaskCompletionSource tcs = new TaskCompletionSource(); 尝试 { this.DownloadStringCompleted += (s, e) => { if (e.Error == null) { tcs.TrySetResult(e.Result); } 别的 { tcs.TrySetException(e.Error); } }; this.DownloadStringAsync(requestUri); } 捕捉(例外前) { tcs.TrySetException(ex); } 如果(tcs.Task.Exception != null) { 抛出 tcs.Task.Exception; } 返回 tcs.Task; }
如果我遗漏了什么,请告知。
【问题讨论】:
-
这可能是由于调度代理的主要方法是
async void(不可能)。附带说明一下,您应该使用 Microsoft 的便携式HttpClient(或Microsoft.Bcl.Async,它提供了WebClient.DownloadStringTaskAsync)。它们都处理所有极端情况,例如异常堆栈(您当前的代码无法正确处理)。 -
非常感谢!你一针见血。这可能是问题之一。另一个是因为我的模型正在使用图钉,并且显然处于计划代理模式,它无法访问它。
标签: asynchronous windows-phone-8 webclient