myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Wie sendet man in C# Events von einer Klasse in die andere?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie sendet man in C# Events von einer Klasse in die andere?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Ozzy
myCSharp.de-Mitglied

Dabei seit: 05.12.2012
Beiträge: 2


Ozzy ist offline

Wie sendet man in C# Events von einer Klasse in die andere?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

bisher habe ich in C# immer eher kleine Projekte gebastelt ohne mich je näher mit der Architektur auseinander zu setzen. Nun möchte ich das bei meinem nächsten Projekt aber ändern. Eigentlich geht es nur darum, Werte von einem an den PC angeschlossenen Mikrocontroller auf einer GUI anzuzeigen. Der uC sendet dafür in regelmäßigen Abständen die Daten über ein eigenes Protokoll.
Nun habe ich eine Klasse für das Protokoll erstellt, dem ich die Einstellungen aus der GUI für die serielle Kommunikation übergebe (Port, Baudrate), und die sich dann mit einem SerialDataReceivedEventHandler um die Daten und die Dekodierung kümmert. Nun möchte ich die Werte allerdings auch in der GUI anzeigen. Eigentlich komme ich aus der C-Programmierung, da würde ich jetzt eine Callback-Funktion in der Protokoll-Klasse registrieren die immer dann aufgerufen wird, wenn ein (spezieller) Wert übermittelt wurde (ungefähr so)

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
typedef void dataCallback_t( uint16_t value );

void prc_registerCallback( uint16_t ID, dataCallback_t *callback )
{
   dataCallbackFunctions[ID] = callback;
}

...

if ( dataCallbackFunctions[ID] != NULL )
   dataCallbackFunctions[ID]( receivedValue );

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
void updateData1( uint16_t value )
{
   ...
}

void registerCallbackFunctions( void )
{
   prc_registerCallback( 1, updateData1 );
   ...
}

Ich habe zwar gesehen, dass es in C# so etwas ähnliches auch gibt (Delegates), habe aber nicht genau verstanden, wie das funktioniert.
Die Frage ist auch: ist das eigentlich der "beste" Weg, oder wie würdet Ihr das machen?

Vielen Dank für Eure Tipps und viele Grüße!
13.01.2021 06:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.849
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja, mit C# verwendet man Delegates, bzw. gekapselt als Ereignisse (events), s.a.  [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse).
13.01.2021 08:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 18.01.2021 01:09