gpt4 book ai didi

c# - 查找哪个模块阻塞了 UI 线程

转载 作者:行者123 更新时间:2023-11-30 20:11:11 25 4
gpt4 key购买 nike

这是一个两部分的问题:

  • 我正在从事一个大型项目,其中将由不同团队开发的多个插件加载到一个公共(public)容器 shell 中。有时我可以看到我的 UI 更新被阻塞,因为有多个并行 UI 更新,我想知道是否有办法找到哪个组件阻塞了 ui 线程

  • 在 .net 中,我如何创建一个单独的 UI 线程,它需要专门的 UI 密集型工作?

非常感谢您的帮助。谢谢。

最佳答案

使用调试器。当您发现它阻塞时调试 + 全部中断。然后Debug + Windows + Threads 并选择主线程。调用堆栈窗口向您显示它在做什么。

极端情况是这些插件大量调用 Control.Begin/Invoke 或 Dispatcher.Begin/Invoke。在这种情况下,您的 UI 线程没有被阻塞,它只是被调度委托(delegate)目标的请求淹没了。并且不再抽空执行其正常职责,例如重新粉刷窗口和响应鼠标和键盘事件。除了与插件作者合作让他们改过自新之外,您对此无能为力。

您已经有了一个 UI 线程,即创建第一个窗口的线程。创建具有自己的窗口的其他线程是可能的,但会导致无法解决的窗口 Z 顺序问题(窗口将消失在另一个应用程序的窗口下方)和窗口互操作线程痛苦的慷慨帮助。

关于c# - 查找哪个模块阻塞了 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com