Laden...

SerialDataReceived Event wird nur auf einer Seite angezeigt

Erstellt von Krachgarten vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.417 Views
K
Krachgarten Themenstarter:in
8 Beiträge seit 2017
vor 6 Jahren
SerialDataReceived Event wird nur auf einer Seite angezeigt

Hallo Forum,

da mir schon öfters hier geholfen wurde, frage ich nach langen Suchen auch mein aktuelles Problem hier an.

Und zwar habe ich eine Windows Form mit 2 UserControls die bei Bedarf geladen werden. Auf der Ersten Seite habe ich eine art Terminal Fenster die mir einfach die HexCodes die mir mein Gerät über SerialPort sendet, anzeigt.
Und auf der zweiten UserControl Zeige ich diese Meldungen in Form von Verschiedenen Farben an (wie ein Ampel System). Also Imprinzip passiert auf beiden Seiten das Selbe.

Jetzt ist es so das das Daten empfangen und Anzeigen nur auf der Seite klappt die ich mir zuerst aufrufe , wenn ich dann auf die Andere Wechsel Zeigt das Event nichts mehr an also nur "" . Also nichts .

Jetzt ist die Frage woran das Liegen kann. Hättet ihr da eine Idee ? Oder bräuchte man dazu etwas von meinem Quellcode?

1.040 Beiträge seit 2007
vor 6 Jahren

Zeige mal bitte ein bissel Code, vor allem die Registrierung des Eventhandlers. =)

K
Krachgarten Themenstarter:in
8 Beiträge seit 2017
vor 6 Jahren

ist schon gelöst, ich habe das Event jetzt in eine eigene Klasse abgekapselt und greife aus dem Programm nur noch drauf zu.

Mein Fehler war überall das gleiche Event aufzurufen, denke mal das das den kompiler verwirrt hat.

Aber danke =)

P
64 Beiträge seit 2011
vor 6 Jahren

Mein Fehler war überall das gleiche Event aufzurufen, denke mal das das den kompiler verwirrt hat.

Ja und nein. Der Compiler ist grundsätzlich nicht verwirrt.
du list ja in deinem Event den seriellen Port erst aus. Das machst du bei jedem Aufruf. Also ist der Buffer vom Port beim zweiten Aufruf des Events bereits leer und nichts kann gelesen werden.

SerialDataReceived += func1
SerialDataReceived += func2

ruft das Event zwei mal auf

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

nur zu Richtigstellung:

du list ja in deinem Event den seriellen Port erst aus.

Ist soweit richtig.

Also ist der Buffer vom Port beim zweiten Aufruf des Events bereits leer und nichts kann gelesen werden.

Ist etwas unglücklich formuliert. Man müsste eher schreiben:
Also ist der Buffer vom Port beim Aufruf des zweiten Eventhandlers (für das selbe Event) bereits leer und nichts kann gelesen werden.

SerialDataReceived += func1
SerialDataReceived += func2

ruft das Event zwei mal auf

Ist so also nicht ganz richtig. Es werden vielmehr jedesmal, wenn das Event vom SerialPort ausgelöst wird, beide registrierte Handler nacheinander aufgerufen. Wenn der erste Handler dann die Daten vom Port liest, bleibt für den zweiten Handler eben nichts mehr übrig.
Das Event selbst wird dadurch aber nicht öfter ausgelöst.

Beim SerialPort darf man sowas generell nicht machen - es könnte sogar sein, dass zwischen den Aufrufen der beiden Handler schon wieder neue Daten anfallen, die dann dieser zweite Handler liest. Dadurch kann sehr schnell ziemlich viel durcheinandergeraten.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

P
64 Beiträge seit 2011
vor 6 Jahren

Klugscheißer 😉

Aber du hast ja recht. Mir ist beim schreiben schon aufgefallen, dass das Ganze ein wenig unglücklich formuliert ist. Mir ist nur nicht eingefallen, wie ichs besser schreiben kann.