Приложение WPF зависает при использовании шрифтов размером более 100 пц

Эта статья поможет вам устранить проблему, из-за которой приложение не будет огораживаться и зависает на неопределенное время.

Применимо к:   .NET Framework 3.5 Пакет обновления 1
Исходный номер КБ:   2712383

Симптом

У вас есть приложение Microsoft .NET 3.5 Window Presentation Framework (WPF), которое использует большие символы и/или шрифты. Приложение становится неотвежительным и зависает на неопределенное время.

Причина

Поток пользовательского интерфейса Windows Presentation Framework вошел в критический раздел, называемый блокировкой композиции. Пока поток пользовательского интерфейса удерживает эту блокировку, ему необходимо синхронизировать связь с потоком отрисовки Windows Presentation Framework. Поток отрисовки обрабатывает большой символ, когда ему нужно войти в блокировку композиции. Так как поток пользовательского интерфейса имеет блокировку композиции, поток отрисовки ждет его, и потоки становятся заблокированными.

Мы подтверждают, что это ошибка в Microsoft .NET 3.5 Framework.

Решение

Эта ошибка исправлена в Microsoft .NET 4.0 Framework. Чтобы обойти эту ошибку, избегайте использования больших символов или шрифтов или обновите приложение для Microsoft .NET 4.0 Framework.

Дополнительная информация

В вышеуказанной симптоме мы определяем большой символ, который фактически имеет размер 100 пт или больше, 100 пт — пороговое значение ошибки. Эффективное означает умножение размера шрифта на любые преобразования. Пороговое значение учитывает все возможное преобразование и влияние параметра DPI компьютера. Например, если в области RenderTransform используется шрифт Arial размером 60 точек, который масштабется в 2 раза, фактический размер составляет 120 пт, что превышает пороговое значение в 100 пт.