【问题标题】:Windows Phone (Mango) Render Thread BlockedWindows Phone (Mango) 渲染线程被阻止
【发布时间】:2011-09-12 05:11:18
【问题描述】:

我正在开发一个应用程序,我似乎花了很长时间才能获取我的数据(30-40 秒),所以我设置了一个低调分析器来检查并查看问题出在哪里是。

老实说,我仍然不知道问题出在哪里。我发现我可以快速(在 5-6 秒内)从我的服务中取回我的数据,将其全部美化以供显示,然后发送一条消息以通知我的 ViewModel 数据已准备好显示(使用 MVVM Light Messaging)。 .. 然后我的渲染线程会阻塞 10-40 秒。

这是我不明白的。我的 UI 线程做得很好......用我在页面上的自定义进度动画制作它的小心脏。而且我通过 Messenger 发送的对象非常小(只有几个布尔值,指示可以在哪里找到数据以及它的外观)。

但是渲染线程(响应屏幕触摸事件的线程)被完全阻塞了。当线程最终解除阻塞时,我一次触摸以移动我的枢轴控件和所有触摸数据寄存器。

我进行了 Windows Phone 性能分析,认为问题出在哪里会非常明显(我认为我会看到 CPU 达到 100% 并且我可以追踪导致我崩溃的函数)但它似乎没有注意到任何异常,通常的 UI 线程占据了节目,但没有任何异常。

我完全糊涂了。 Mango 中有什么我需要注意的东西会严重阻塞我的渲染线程吗?

【问题讨论】:

  • 更新:看来问题是在运行我的 Deployment.Current.Dispatcher.BeginInvoke 时出现了某种不正常的延迟
  • 更新:看起来问题是在运行我的 Deployment.Current.Dispatcher.BeginInvoke 时出现了某种不正常的延迟。 BeginInvoke 之前的行将在 BeginInvoke 最终运行前 20-30 秒运行。所以我想这将是 UI 线程的问题。除了动画一直流畅运行,我仍然无法从中获得触摸事件。我很困惑。
  • 动画不受影响的原因是在 WP7 上,实际动画在许多情况下发生在与 UI 不同的线程上

标签: silverlight mvvm-light windows-phone-7 windows-phone-7.1


【解决方案1】:

我想我们需要看一些代码。另请注意,GetIsNetworkAvailable 可能需要 20 多秒才能返回结果。您提到您正在获取数据,因此您可能正在 UI 线程上调用此函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多