我有一个正在积极使用的应用程序,UI 线程很少发生“卡住”。这当然会导致应用程序变得无响应并要求用户手动终止它。
由于重现此问题的难度很大,我想开发一些工具来帮助收集有关该问题何时在现场发生以及当时发生的情况的数据。我正在考虑的是某种后台看门狗任务,它将监视来自定期调度的 UI 线程任务的“心跳”。如果它安静得太久,我可以说 UI 被有效地锁定(或者至少停滞了比我想要的更长的时间)并因此收集数据。
所以,在准备这个之前,有几个问题:
最佳答案
Does something like this already exist?
是的。必须在进程之外执行此操作,因为死锁的一个很可能使诊断代码也将死锁。 DebugDiag utility明确支持挂起的应用程序。
I'm still debating what information I should try to gather
您从 DebugDiag 中获得的小型转储应该足以让您有机会诊断原因。演示解决死锁的示例调试 session 是 shown here .
当然,仔细检查您的代码永远不会受到伤害。 UI 线程死锁通常由以下原因引起:
关于c# - 检测停滞的 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21631724/