Question

Dans Vista et versions ultérieures, si une application ne répond plus, la fenêtre Desktop Manager est capable de gérer redessinant si nécessaire (déplacer une fenêtre sur elle, faites-le glisser autour, etc.), car il a gardé un tampon de pixels pour elle. Windows tente également de détecter le moment où une application ne répond plus après un certain délai, et tente de tirer le meilleur parti de la situation - je crois qu'il obscurcit par la fenêtre, ajoute: « ne répond pas » à sa barre de titre, et peut-être d'autres effets.

Maintenant, nous avons une application qui utilise la peau des régions de fenêtres et les fenêtres en couches, et il ne joue pas bien avec ces effets. Nous avons mis au point sur XP, mais nous avons remarqué un étrange effet lors du test sur Vista. À certains endroits, l'application peut passer quelques instants sur un calcul ou un rappel, et « si un message n'a pas été récupéré dans les 5 secondes, le DWM déclare la fenêtre à suspendre » ( MSDN - Prévention dans les applications Windows se bloque ). Il semble que lorsque ce coups de pied, un problème se produit graphique étrange: tous les pixels qui serait transparent 100% en raison des zones de fenêtre devient noir, ce qui rend effectivement à nouveau la fenêtre rectangulaire, avec un fond noir. Il semble y avoir d'autres anomalies, avec les pixels étant déplacé un peu dans certaines boîtes de dialogue de l'enfant de la fenêtre d'origine.

Je travaille à réduire ces retards (idéalement Windows jamais besoin d'intervenir comme celui-ci), et en essayant de maintenir la réactivité pendant qu'il est occupé, mais je voudrais encore savoir ce qui est à l'origine de rendre comme ça, comme je ne peux pas garantir que je peux éliminer tous les retards.

En fait, je voudrais juste savoir ce que Windows est en train de faire lorsque cela se produit, et comment je peux faire mon application se comporter correctement avec elle. des applications écorchés doivent travailler encore sur Vista et versions ultérieures, donc je dois comprendre ce que je fais c'est non standard. Je ne sais comment regarder même pas exactement pour plus d'informations sur la façon dont Windows gère maintenant des applications qui ne répondent pas, que mes recherches ne renvoient que des personnes ayant des problèmes avec les applications qui ne répondent pas, ou des explications très rudimentaires de ce que le DWM fait avec ces applications. Heck Je ne suis même pas sûr à 100%, il est le DWM responsable, mais il semble probable. Tous les clients potentiels?

Photo de problème; Les captures d'écran ne pas saisir l'effet (notez que la mémoire tampon de dialogue blanc est décalé - il se déplace exactement par la distance, il a été décalé par rapport à la fenêtre principale (bleu)):

Était-ce utile?

La solution 2

Je l'ai trouvé qu'il est appelé « ghosting » quand il le fait, et il a été introduit dans XP (mais il semble DWM il faut un peu plus loin, car il garde la trace des pixels de chaque application). Il est possible de le désactiver pendant toute la durée de la vie avec DisableProcessWindowsGhosting() de votre application. Certaines personnes disent que ce n'est pas recommandé, mais étant donné à quel point il joue avec des fenêtres en couches, les inconvénients de le mettre hors tension sont négligeables. Je l'ai testé et il fait exactement ce qu'il prétend; maintenant si le serveur prend un peu plus longtemps que prévu pour revenir, il ne sera pas mutiler toute l'interface.

S'il y a une meilleure façon d'obtenir mes fenêtres en couches pour travailler avec la manipulation de Vista / 7 de ghosting sans désactiver purement et simplement, je serais certainement intéressé encore, mais je vais probablement accepter cela comme la réponse autrement.

Autres conseils

Ce comportement est la norme; vous pouvez également remarquer dans Office 2007/2010, quand ils gèlent.

Je pense qu'il ya essentiellement deux choses qui vous aideront à ceci:

Tout d'abord, comme vous l'avez fait, essayez de ne pas accrocher en premier lieu. Faire aussi peu soulever des charges lourdes dans les discussions de l'interface utilisateur que possible

Deuxièmement, ne pas utiliser plusieurs fenêtres de haut niveau pour mettre en œuvre ce que l'utilisateur est censé voir comme un seul; à la place, faire vous-même compositing. Cela permettra d'éviter les couches d'être déplacé hors de la synchronisation d'un autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top