2013-09-04 1 views
1

Cela devrait être simple!C#, invoquer méthode anonyme (Action <>) à partir du fil d'arrière-plan

Je souhaite créer une Action < anonyme> déléguer pour effectuer une mise à jour de l'interface graphique, que j'appellerai de plusieurs autres délégués anonymes (qui seront exécutés sur des threads séparés).

void Test() { 

     Action<string> invokeDisplay = new Action<string>(delegate(string Element) { 
      //Do a variety of things to my GUI depending on Element parameter 
     }); 


     MethodInvoker opLong1 = new MethodInvoker(delegate() { 

     // Do long task 

      this.Invoke(invokeDisplay("long1")); 
     }); 

     MethodInvoker opLong2 = new MethodInvoker(delegate() { 

     // Do long task 

      this.Invoke(invokeDisplay("long2")); 
     }); 

     new Thread(new ThreadStart(opLong1)).Start(); 
     new Thread(new ThreadStart(opLong2)).Start(); 
    } 

Alors, quelle est la syntaxe correcte pour cette ligne?

  this.Invoke(invokeDisplay("long1")); 
+0

Quelle GUI? WinForms, WPF, jQuery? –

+0

Winforms. .Net 3.5 – user1830285

+2

Pas 100% sûr, mais je pense que this.Invoke ((MethodInvoker) (() => invokeDisplay ("long1"))); 'fonctionnera. –

Répondre

3

La syntaxe serait:

Invoke(action, "long1"); 

Le délégué est le premier paramètre, et l'argument (s) que vous voulez passer à elle suivre.

+0

C'est l'un. Merci. – user1830285

1

Une autre option disponible:

this.Invoke((Action)(() => invokeDisplay("long1"))); 
Questions connexes