L’application WPF se bloque lorsque vous utilisez des polices dont la taille est de plus de 100 pts

Cet article vous aide à résoudre le problème où l’application ne répond plus et se bloque indéfiniment.

S’applique à :   .NET Framework 3.5 Service Pack 1
Numéro de la ko d’origine :   2712383

Symptôme

Vous avez une application Microsoft .NET 3.5 Window Presentation Framework (WPF), qui utilise des caractères et/ou des polices de grande taille. L’application ne répond plus et se bloque indéfiniment.

Cause

Le thread d’interface utilisateur de Windows Presentation Framework a entré une section critique appelée verrouillage de composition. Pendant que le thread d’interface utilisateur maintient ce verrou, il doit synchroniser la communication avec le thread de rendu De l’infrastructure de présentation Windows. Le thread de rendu traite un caractère de grande taille lorsqu’il doit entrer dans le verrou de composition. Étant donné que le thread d’interface utilisateur a le verrou de composition, le thread de rendu l’attend et les threads deviennent en blocage.

Nous avons confirmé qu’il s’agit d’un bogue dans Microsoft .NET 3.5 Framework.

Résolution

Ce bogue a été résolu dans Microsoft .NET 4.0 Framework. Pour contourner ce bogue, évitez d’utiliser des caractères ou des polices de grande taille, ou mettre à niveau votre application pour cibler Microsoft .NET 4.0 Framework.

Informations supplémentaires

Dans le symptôme ci-dessus, nous définissons grand pour signifier un caractère avec une taille effective de 100 pts ou plus, 100 pt étant le seuil de bogue. Effective refers to multiplying the font size by any transforms. Le seuil prend en compte toutes les transformations qui peuvent être en vigueur et l’effet du paramètre DPI de votre ordinateur. Par exemple, si vous utilisez une police Arial de 60 points dans l’étendue d’un RenderTransform qui s’dimensionnait d’un facteur de 2, la taille effective est de 120 pts, ce qui dépasse la limite de seuil de 100 pts.