Michel Perfetti
Utilisation d'un proxy : masquer l'appel à Control.Invoke dans les applications Windows Forms multithreads
En utilisant les mécanismes de proxy du remoting, l'appel à la méthode « Invoke » des contrôles Windows Forms dans le cas d'application multithreads p
Par Michel Perfetti publié le 24/02/2006 à 08:35, lu 8802 fois, 5 pages
 1 | Introduction
Téléchargez le code source - 88 Kb
Introduction
Dans une application Windows Forms multithreads, lorsque les threads modifient un contrôle de l'application, ils doivent obligatoirement passer par la méthode « Invoke » du contrôle. A chaque modification, il est nécessaire de créer un délégué ce qui alourdit le code.

Tous les contrôles héritent de la classe System.Windows.Forms.Control qui hérite elle-même de la classe MarshalByRefObject. Comme toute instance de MarshalByRefObject peut être appelée via un proxy, nous allons créer un proxy pour cacher l'appel à la méthode Invoke pour le Contrôle. L'article suivant Réflexion et RealProxy: utilisation d'une interface décrit le fonctionnement des proxys en Remoting.

Généralement pour modifier un contrôle d'une fenêtre:
  1. Soit une méthode de la fenêtre prend en charge les mises à jour
  2. Soit on le contrôle membre de la fenêtre est directement utilisé pour effectuer les mises à jour, par exemple this.textBox1.Text = ..., this étant la fiche courante
Le fonctionnement attendu du proxy est donc le suivant : tout appel de méthode d'un composant proxifié est appelé dans le thread principal de l'application, et toute manipulation d'un champ de type composant d'un composant proxifié est en fait une manipulation d'un proxy vers ce composant au lieu du composant lui-même.
 
» Démarrer une discussion