0

有没有人遇到过这个?Dispatcher 有时会在应用程序启动后立即进入停止处理其队列的状态。队列只是构建和构建,而 Dispatcher 什么都不做。UI 线程是响应式的。最好的部分是这个问题是不确定的。有时会出现,有时不会。如果我在启动时加载一个大文件,它更有可能出现。我的应用程序做了很多事情,我不知道从哪里开始调试。希望我可以检查 Dispatcher 的代码,但这就是使用闭源框架时得到的结果。该死的 MS 和该死的越野车 Silverlight。

4

2 回答 2

0

这不能回答您的问题,但这里有 Telerik 提供的免费工具,您可以使用它来检查 Dispatcher 的代码:
http ://www.telerik.com/products/decompiler.aspx

您也可以使用 Reflector,但它不是免费的(14 天试用):
http ://www.reflector.net/

于 2012-12-11T09:12:43.940 回答
0

Reflector 帮助调试了 Dispatcher(它生成 PDB 并很好地集成)。看起来 Silverlight Dispatcher 只是本机代码调度程序的一个瘦包装器。包装器仅处理 BeginInvoke 委托的排队并在本机调度程序调用调度程序上的回调时运行它们。当队列为空且第一个委托已排队时,Dispatcher 会提醒 RuntimeHost 它应该在有机会时回调 Dispatcher。

我关于错误的理论(在运行 Out-of-Browser 时肯定会发生,但不确定 In-Browser 时)是,如果 Dispatcher 请求 RuntimeHost 在错误的时间回调(例如,当应用程序启动未完成或 RuntimeHost 是处理很多新的 UI 元素......不能准确地说),RuntimeHost 忘记了回调。Dispatcher 从不第二次询问它,也从不做任何工作。

一种解决方法可能是使用 DispatcherTimer(这似乎没有错误......当 Dispatcher 卡住时,我的 DispatcherTimers 继续滴答作响)。最简单的 Dispatcher 替代品可能是复制 Dispatcher 反编译的源代码,其中包括基于 DispatcherTimer 的代码路径。

于 2012-12-11T22:26:35.217 回答