Zum Inhalt springen
  • 0

Events in welchem Thread auslösen


steinadler

Frage

Hallo ihr,

ich habe eine Klasse, die Arbeit per Thread ausführt. Wenn ich nun aus diesem Thread per Event mit meinem Hauptfenster kommunizieren will, muss ich das ja per Invoke in den GUI-Thread umleiten. Angenommen meine Klasse hat noch weitere Events, macht man das dann so, dass die Events der Klasse alle aus dem selben Thread kommen (d.h. ich müsste das Event aus dem Thread in den Erzeuger-Thread der Klasse umleiten), oder macht man das dann erst an zentraler Stelle, meinetwegen im ViewModel?

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

2 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Hi steinandler!

Ich hatte in einem meiner Projekte ein ähnliches Problem, bei dem ich eine Datenbank-Abfrage in einen eigenen Task ausgelagert hatte.Nach Beendigung der Abfrage wurde dann über einen Referenz auf das UI die entsprechenden Steuerelemente neu betextet.

Hab das ganze dann darauf hin umgestellt, als dass ich per Timer (System.Windows.Form-Timer) alle 5 Sekunden die Abfrage gestartet habe und dann ein Event feuere, für welches ich im UI den entsprechenden Handler habe. Das Problem, war du hast bzw haben wirst, wenn du in Thread 2 ein Even feuerst und in deiner UI-Klasse das Event behandelst, dann wirst du eine InvalidOperationException erhalten, da das Event nicht im UI-Thread behandelt wird, sondern in dem Aufruf-Thread #2. D.h. du greifst dann von Thread 2 auf den UI-Thread zu (was zu genannter Exception führt).

Im Endeffekt wirst du das lösen müssen, indem du in der UI-Klasse deine Handler-Methoden unterbringst und dann per Invoke die Controls ansprichst. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Um welche Programmiersprache geht es denn hier?

Normalerweiße bietet deine (G)UI Library eine executeAfter() oder z.B. eine Platform.runLater() Methode (JavaFX Library), bei der du den Code übergibst, der dann in dem UI Thread ausgeführt wird.

 

z.B. für Java:

//do something, get data and so on

//run in UI thread
Platform.runLater(() -> {
  //your UI Update code here
});

//other code here

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...