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 9575 fois, 5 pages
 5 | Conclusion
Téléchargez le code source - 88 Kb
Conclusion
Le projet fournit en téléchargement contient la classe ControlInvoker<> et un exemple d'utilisation. Cet exemple permet de réaliser un benchmark de l'utilisation du proxy. La simplification de l'écriture est intéressante car elle évite le passage par délégué :
for (int i = 0; i <= 100; ++i)
{    
    InvokerProxy.progressBar1.Value = i;
    InvokerProxy.Text = String.Format("{0} - {1}%", textBox1.Text, i); 
}
Au lieu de :
for (int i = 0; i <= 100; ++i)
{
    int j = i;    
    Invoke((MethodInvoker)delegate
     {
        progressBar1.Value = j;
        Text = String.Format("{0} - {1}%", textBox1.Text, j);
     });                            
}
Par contre l'appel est légèrement plus lent .Pour 10 appels au bloc de code précèdent,c'est à dire 2000 modification de l'interface, j'obtiens les résultats suivants :
  • Appel simple (thread principal) : 4.2 secondes
  • Appel simple via proxy : 4.8 secondes
  • Appel d'un thread avec Control.Invoke : 4.5 secondes
  • Appel d'un thread via le proxy : 5.5 secondes
 
» Démarrer une discussion