【发布时间】:2010-11-02 12:55:58
【问题描述】:
我一直被 Ivan Krivyakov 很好地提到的可怕的 OnUserPreferenceChanged Hang 所困扰,在这里:
http://ikriv.com/en/prog/info/dotnet/MysteriousHang.html#BeginInvokeDance
我前一阵子发了一个问题,当我最初遇到这个问题时:
Yet another C# Deadlock Debugging Question
我以为我已经通过删除从 UI 线程构建的控件解决了这个问题,但过了一会儿它又出现了(可能永远不会离开......)。
我们一直在使用 .NET 3.5,据我了解,它使用的是 CLR 2.0。最近,应用程序已升级为使用 .NET 4.0 Client Profile / CLR 4.0。此外,我们已从 Infragistics WinForms 10.1 升级到 10.3。唯一的其他区别是之前的版本被混淆了......有人遇到过混淆和挂起的问题吗?
我再次尝试一劳永逸地摆脱任何应用程序挂起,但不同寻常的是,我无法在最新版本中重现该挂起(使用 .NET 4.0)。在以前的版本(使用 .NET 3.5)中,使用 Ivan Krivyakov 的方便的 Freezer 应用程序(参见他的文章)很容易重现该挂起,该应用程序会根据请求触发 WM_SETTINGCHANGE 消息。
我可能有点希望这个问题会自行消失,但有谁知道 CLR 从 2.0 到 4.0 是否有任何更改会导致这种情况?
------------------------------------------ - - - - -解决方案 - - - - - - - - - - - - - - - - - - - - ----------
所以在测试应用程序的变体之后,例如CLR 2.0 + Infragistics 2010.1、CLR 2.0 + Infragistics 2010.3 和 CLR 4.0 + Infragistics 2010.1,我们认为我们已经确定问题是 WinForms 2010.1 中的 Infragistics 组件存在问题(无热修复)。我们还没有使用 CLR 2.0 或 CLR 4.0 和 Infragistics 2010.3 来重现冻结(而且我们现在已经非常擅长重现这种情况......)。
【问题讨论】:
-
I. Krivyakov 文章的新链接:Mysterious Hang
标签: c# .net multithreading clr deadlock