4 Stimmen

Java's invokeLater() Äquivalent in Windows Forms?

Ich bin neu in Windows Forms und komme aus der Java Swing-Welt. Gibt es ein Äquivalent für Java's SwingUtilities.invokeLater() ? Oder wie kann ich eine Aufgabe im Haupt-Thread des Windows Forms-Ereignisses ausführen lassen?

Ich führe eine Hintergrundaufgabe mit einer synchronen API auf einem separaten Thread aus. Am Ende der Aufgabe möchte ich einige deaktivierte Schaltflächen wieder aktivieren. Aber wenn ich versuche, dies zu tun, erhalte ich eine Ausnahme (zu Recht), weil ich die Benutzeroberfläche in einem Nicht-UI-Thread ändere.

Wie kann ich diese Aktion in die Warteschlange stellen, damit sie im Hauptereignis-Thread ausgeführt wird? Ich habe die Antwort nicht gefunden, indem ich sowohl im Web als auch in SO gesucht habe. Ich vermute, dass ich die Frage nicht richtig gestellt habe. Für jede Hilfe bin ich dankbar - danke!

13voto

Jon Skeet Punkte 1325502

Sie können einen Delegaten ausführen auf den UI-Thread mit Control.Invoke o Control.BeginInvoke . Eine Alternative ist die Verwendung von BackgroundWorker Es ist praktisch, wenn Sie immer nur eine Sache während der Verarbeitung und eine Sache nach der Fertigstellung tun wollen, aber wenn Sie beliebige Operationen auf der Benutzeroberfläche durchführen wollen, verwenden Sie Invoke / BeginInvoke ist flexibler.

Ich habe eine Seite zur Verwendung von Invoke / BeginInvoke in meinem Anleitung zum Einfädeln . (Sie deckt nicht ab BackgroundWorker Ich fürchte.)

Sie sollten sich auch Folgendes ansehen Joe Albaharis Anleitung zum Einfädeln .

2voto

Erik Punkte 718

Haben Sie sich mit dem BackgroundWorker ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X