3 votes

Pourquoi est-ce un abus d'appeler refresh() ?

Comme dans cet exemple :

someImage.Source = newSource;
someImage.refresh();

Il y a quelques jours, dans este post J'ai répondu avec refresh() et j'ai eu des retours comme quoi c'était un hack/abus. Je ne comprends pas pourquoi.

3voto

Konrad Rudolph Points 231505

Le MSDN a la réponse.

Control.Refresh :

Force le contrôle à invalider sa zone client et à se redessiner immédiatement, ainsi que tous les contrôles enfants.

Control.Invalidate :

Invalide toute la surface du contrôle et provoque le redécoupage du contrôle. [ ] L'appel de la méthode Invalidate ne force pas une peinture synchrone.

(C'est moi qui souligne)

Le fait est que Refresh contrairement à Invalidate force un appel synchrone, ce qui interrompt effectivement le flux d'événements par défaut dans les formulaires et coupe la ligne dans la file d'attente des messages. Cela peut entraîner le retard d'autres messages de fenêtre (événements du système d'exploitation).

2voto

Guffa Points 308133

Le site Refresh n'est pas du tout nécessaire si vous disposez d'une interface utilisateur réactive. La définition du Source crée un message qui invalide l'affichage du contrôle, de sorte qu'il sera actualisé automatiquement lorsque ce message sera traité.

Ce n'est que si votre code contient une longue boucle, de sorte qu'il ne traite pas du tout de messages pendant une longue période, que vous devez utiliser la fonction Refresh méthode. Une boucle aussi longue doit être évitée, car elle rend l'interface utilisateur peu réactive.

0voto

anishMarokey Points 6895

Par des mots simples Refresh() va recharger l'interface utilisateur, quand un changement

0voto

adrianm Points 7067

Parce que la plupart des frameworks gui gèrent les rafraîchissements/mises à jour automatiquement si vous les utilisez correctement.

Avec l'actualisation, vous contournez le symptôme (quelque chose n'est pas automatiquement mis à jour) au lieu de résoudre la cause première.

Le problème est que Refresh commence généralement à se propager comme un virus. Vous l'insérez à un endroit et soudain vous en avez besoin à un deuxième endroit, puis à un troisième, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X