Forum: PC-Programmierung C# eine zyklische funktion unterbrechen


von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Ich habe ein Programm für die Protokollierung von seriellen Daten 
geschrieben und habe das Problem wenn ich die Protokollierung mit einem 
Button starte kann ich es sehr schwer wieder anhalten. Beim Starten wird 
eine bool auf true gesetzt und mit neuerlichem Druck auf den Button wird 
die Variable wieder false, aber da die serielle Schnittstelle ständig 
Daten schickt funktioniert das kaum. Beim VB 6.0 hat es einen Befehl 
gegeben der in diese Routine geschrieben wurde und der hat dann andere 
Aktionen zugelassen. Gibt es bei C# auch so etwas. Bitte um eure Hilfe. 
Danke.

Lg.

Johann K.

von Peter II (Gast)


Lesenswert?

verstehe das Problem nicht. Frage doch einfach die Variabel ab und 
beendet dann das lese der Daten. Oder schließen einfach den Com-port.

von NurEinGast (Gast)


Lesenswert?

Application.DoEvents

Aber du solltest wirklich die Verarbeitung der seriellen Schnittstelle 
parallel in einem Thread machen.

von NurEinGast (Gast)


Lesenswert?


von C# Pfuscher (Gast)


Lesenswert?

1. Setze die boolsche Variable volatile.

2. Falls es eine while-Warteschleife gibt, z.B. 
while(!serialDataEnabled); mach aus dem Semikolon eine Wartefunktion 
z.B. Thread.Wait(20);

2. Falls das Programm an irgendeiner Stelle abstürzt setzt du da einfach 
ein try{}catch{} hin. Ist vielleicht nicht die optimale Lösung aber ich 
konnte schon oft solche Probleme mit einem try und catch Block ganz 
einfach lösen.

von nicht"Gast" (Gast)


Lesenswert?

Moin,

mach es lieber richtig und verarbeite die Daten asynchron.

Also Port erzeugen, eine Callback Methode anmelden und dort die Daten
verarbeiten.

hier gibts Beispielcode.
https://msdn.microsoft.com/de-de/library/system.io.ports.serialport.datareceived%28v=vs.110%29.aspx

In deinem button_click kannst du dann einfach den Port zu machen und die 
Verarbeitung hört auf.

von Klatec (Gast)


Lesenswert?

Hallo Zusammen

Danke für eure Antworten.
Im ersten Schritt reicht mir

Application.DoEvents

vollkommen weil ich das Programm nur für die Entwicklung einer 
Schnittstelle zu meiner Modellbahn (XpressNet) benötige um das Protokoll 
zu überwachen. Danke nochmals.

Lg.

Johann K.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.