Erstellen Sie einen MethodInvoker-Funktion

Also ich habe multi-threaded meine Anwendung. Ich lief in diese Fehlermeldung "Cross-thread operation not valid: Steuerung und Zugriff von einem anderen thread als dem thread der es erstellt wurde."

Mein thread war das aufrufen einer windows-forms-Steuerelement. So, dies zu umgehen, benutzte ich

Kontrolle.Invoke(new MethodInvoker(delegate { ControlsAction; }));

Ich versuche herauszufinden, eine Möglichkeit, ich könnte diese generische Methode, so kann ich die Wiederverwendung von code und die app eine Menge sauberer.

So zum Beispiel auf meiner ruft ich den folgenden Code mit einem rich-text-Feld.

rtbOutput.Invoke(new MethodInvoker(delegate {    
rtbOutput.AppendText(fields[0].TrimStart().TrimEnd().ToString() + " Profile not   
removed.  Check Logs.\n"); }));

Anderen ist mit einer combo-box, wo ich einfach die Einstellung der text.

cmbEmailProfile.Invoke(new MethodInvoker(delegate { EmailProfileNameToSetForUsers = 
cmbEmailProfile.Text; }));

Weiteres Beispiel ist wieder mit einem rich-text-box, wo ich bin, einfach löschen.

 rtbOutput.Invoke(new MethodInvoker(delegate { rtbOutput.Clear(); }));

Wie würde ich erstellen Sie eine generische Funktion, die könnten das für mich tun, wo ich gerade übergeben müssen in der Steuerung mit der Aktion will ich es tun?

Dies ist, was wir gekommen sind so weit.

private void methodInvoker(Control sender, Action act)
    {
        sender.Invoke(new MethodInvoker(act));
    }

also das problem ist so etwas wie appendtext, scheint es nicht zu mögen.

  • verwenden Sie ein Action - <T> statt / mit den Delegierten.
InformationsquelleAutor user1158745 | 2013-04-05
Schreibe einen Kommentar