当你使用大小超过 100 磅的字体时,WPF 应用程序挂起

本文帮助您解决应用程序无响应并无限期挂起的问题。

适用于:   .NET Framework 3.5 Service Pack 1
原始 KB 编号:   2712383

症状

你有一个 Microsoft .NET 3.5 Window Presentation Framework (WPF) 应用程序,该应用程序使用大字符和/或字体。 应用程序将无响应并无限期挂起。

原因

Windows Presentation Framework UI 线程已进入一个称为合成锁的关键部分。 当 UI 线程保持此锁定时,它需要与 Windows Presentation Framework 呈现线程同步通信。 呈现线程在需要进入合成锁时正在处理一个大字符。 由于 UI 线程具有合成锁定,呈现线程会等待它,并且线程会死锁。

我们已确认这是 Microsoft .NET 3.5 框架中的 Bug。

解决方案

此 Bug 已在 Microsoft .NET 4.0 Framework 中修复。 若要解决此 bug,请避免使用大字符或字体,或将应用程序升级为面向 Microsoft .NET 4.0 Framework。

更多信息

在以上症状中,我们定义大表示有效大小为 100 pt 或更大、100 pt 为 bug 阈值的字符。 有效表示将字体大小乘以任何转换。 阈值会考虑任何可能生效的转换,以及计算机的 DPI 设置的效果。 例如,如果在 RenderTransform 范围内使用 60 磅 Arial 字体,该字体的缩放系数为 2,则有效大小为 120 pt,超过 100 pt 阈值限制。