如果由 ScheduledAgent 触发 GetStringAsync 错误,但在 WP8 应用程序使用期间没有错误

Posted

技术标签:

【中文标题】如果由 ScheduledAgent 触发 GetStringAsync 错误,但在 WP8 应用程序使用期间没有错误【英文标题】:Error for GetStringAsync if triggered by ScheduledAgent but no error during WP8 App usage 【发布时间】: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)。它们都处理所有极端情况,例如异常堆栈(您当前的代码无法正确处理)。 非常感谢!你一针见血。这可能是问题之一。另一个是因为我的模型正在使用图钉,并且显然处于计划代理模式,它无法访问它。 【参考方案1】:

我的问题是因为我在模型中使用图钉作为我的对象类型之一。显然,在调度代理中,它无法访问该对象类型,因此引发了上述错误。

【讨论】:

以上是关于如果由 ScheduledAgent 触发 GetStringAsync 错误,但在 WP8 应用程序使用期间没有错误的主要内容,如果未能解决你的问题,请参考以下文章

MEAN - router.get 方法未触发

[Java安全]Fastjson>=1.2.36$ref引用可触发get方法分析

[Java安全]Fastjson>=1.2.36$ref引用可触发get方法分析

如果由同一应用程序触发,则丢弃 QClipboard::dataChanged() 信号

键盘的按下事件和change事件有啥区别?

由 Windows 任务调度程序触发