Entwickler-Ecke
Basistechnologien - Threadübergreifene Vorgänge außerhalb der Main-Klasse
Määx - Fr 09.08.13 12:34
Titel: Threadübergreifene Vorgänge außerhalb der Main-Klasse
Hallo zusammen,
ich habe ein kleines Programm, dass Messaging betreibt und anfangs zum teste das ganze wie folgt umgesetzt:
Die Main erzeugt eine Instanz der Empfängerklasse und aboniert dessen Events und beeinflusst dann via BeginInvoke die GUI. Dann habe ich später einen Manager hinzugefügt der das ganze übernimmt. Also habe ich bei Empfang eines Events aus der Main den Manager immer wie folgt aufgreufen:
C#-Quelltext
1: 2: 3: 4:
| BeginInvoke(new Action(() => { __myManager.doAction(EventArgs); }), null); |
Jetzt wollte ich den Empfänger direkt in den Manager legen um den Umweg über die Main zu ersparen. Der Manager erzeugt jetzt also eine Instanz des Empfängers und startet dessen Listener-Threads. Bei Ankunft einer neuen Nachricht wir ein Event ausgelöst und der Manager soll wie früher darauf reagieren. Also müsste ich hier ebenfalls ein BeginInvoke ausführen. Nur leider ist der "normalen Klasse" Manager diese Funktion nicht bekannt und im VisualStudio kann ich sie auch nicht auflösen lassen. Ist es hier nicht möglich eine solches Konstrukt laufen zu lassen und muss das immer über die Main gehen?
Sorry für die vll. dumme Frage...
Viele Grüße
Määx
Määx - Fr 09.08.13 12:55
Hey,
ich spreche damit indirekt die UI an: Und zwar habe ich mehrere UserControls denen alle der Manager aus der Main übergeben wird. Je nach Message Events soll der Manager einige Aktionen durchführen und erzeugt dann wiederum diverse Events die an die UserControls gehen wo dann die UI threadübergreifend angepasst werden soll.
Da würden mir locks, Mutexe usw. nicht helfen oder?
Vielen Dank
Määx
Edit: also wenn ich das richtig verstehe läuft ja jedes ausgelöste Event in dem ListenerThread der Empfängerklasse. Somit läuft ja auch das ausgelöste Event im UserControl in dem Thread und hat keine Möglichkeit auf die GUI zuzugreifen? Oder habe ich da etwas falsch verstanden?
Ralf Jansen - Fr 09.08.13 14:18
Die UserControls fangen Events vom Manager die nicht im UI Thread laufen? Dann muß im EventHandler des UserControls BeginInvoke des UserControls benutzt werden.
Määx - Fr 09.08.13 15:56
oh nein, jetzt seh ich meinen Fehler!! Danke! Das hatte ich als erstes probiert, aber sinnloserweise in dem Presenter meines UserControls. Der kannte den BeginInvoke natürlich auch nicht...
Jetzt klappts! Vielen Dank!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!