C# GUI Applikation

Gast #4174815
Lesenswert?
• ▲
▼
Hallo,

für eine Ethernet Anwendung habe ich eine Klasse erstellt, die alle 
gewünschten Funktionalitäten abbildet. Nun möchte ich Daten von dieser 
Klasse nach außen an die GUI weiterreichen. Die Klasse beinhaltet einen 
Threading.Timer. Wie können die Daten an die GUI weitergereicht werden? 
Welche Vorgehensweise wäre dafür geeignet?
#4174842
Lesenswert?
• ▲
▼
Wenn du das in eigene Threads packst wird es kompliziert,
ermöglicht aber ein Blockierungsfreies Arbeiten.

Was bei .Net Anwendungen wichtig ist, dass GUI Controls nur von dem 
Thread modifiziert, aktualisiert und gezeichnet werden die dieses 
Control auch erstellt haben (Bedeutet, den Konstruktor aufgerufen)

Dein Thread für die Gui darf sich deshalb nicht beenden.
Wenn du einen eigenen Thread für die GUI nimmst, darfst du den nur mit 
sleep schlafen lassen. Mit Application.DoEvents kannst du dann den 
GUIThread die Events bearbeiten lassen.

eine Typische Schleife für die GUI würde so aussehen:
1
Form1 frm = new Form1();
2
frm.show();
3
while(!exit){
4
   Application.DoEvents();
5
   System.Threading.Thread.sleep(10);
6
}


Einfacher ist es, ein Standard Projekt mit Form zu machen und für deinen 
Netzwerkcode ein eigenen Thread zu erstellen.

Bei den Timerevents bin ich mir nicht sicher, aber wenn ich mich richtig 
erinnere werden die Timer events in dem  Thread bearbeitet in dem der 
Timer auch erstellt wurde. Solange der Thread im Timerevent ist, ist 
dieser Thread blockiert und kann keine GUI events ausführen.
Aus dem Fremden Thread kannst du mit der invoke Funktion Funktionen mit 
dem GUI Thread aufrufen.

Viele Grü?e
#4175957
Lesenswert?
• ▲
▼
> eine Typische Schleife für die GUI würde so aussehen:
>
1
Form1 frm = new 
2
> Form1();
3
> frm.show();
4
> while(!exit){
5
>    Application.DoEvents();
6
>    System.Threading.Thread.sleep(10);
7
> }

Bitte hör auf so einen Schrott zu posten, das ist einfach alles nur 
kompletter Blödsinn. Das hat man vielleicht bei VB6 noch so gemacht, 
aber ganz bestimmt nicht mehr seit in unserer Jahreszahl eine 2 davor 
ist...

Nun zum Thema:
Ich würde die Daten aus deiner Klasse einfach per Event verteilen, dann 
kann die Gui damit machen was sie will. Ob WinForms oder WPF ist dann 
eigentlich egal und deine Netzwerk Klasse ist und bleibt schön 
gekapselt...
Gast #4176809
Lesenswert?
• ▲
▼
user schrieb:

> vielen Dank für deinen Beitrag. Wie meinst du das genau mit Events
> verteilen?

Du verpaßt deiner Klasse einfach ein paar öffentliche Events, mittels 
derer sie alle relevanten Änderungen ihres Status nach außen meldet. An 
diese Events kann sich dann dranhängen wer immer das will.

Probleme bezüglich des Multithreading muß aber denn immer derjenige 
lösen, der sich an diese Events ankoppelt. Solange es dabei immer nur um 
die Synchronisation mit deim Haupthread der Anwendung und dem darin 
laufenden GUI geht, ist das fast immer ziemlich trivial, weil nahezu 
alle GUI-Komponenten von Control erben und damit auch dessen Methoden 
InvokeRequired und Invoke bzw. BeginInvoke.
Gast #4177257
Lesenswert?
• ▲
▼
Hallo,

wie funktioniert das mit den öffentlichen Events? Sollen die 
öffentlichen Daten in einem Event verpackt werden? Mir würde ein kleines 
Beispiel dazu sehr helfen. Wo lässt sich im Netz so ein Beispiel 
beziehen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren