Hallo zusammen ich habe das Problem, das Mein Programm hängt sobald ich meinen Serial Port auslesen will. Ich möchte Dauerhaft Daten auslesen von einer Com Schnittstelle und ein Start Signal für die Anlage Senden. mein Code den ich dauerhaft einlesen will kommt so an T25.21F90.54E Temperatur = 25.21 Füllstand = 90.54 das E steht für Ende anbei der Code.. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; using System.Threading; namespace Comschnittstelle { public partial class Form1 : Form { public Form1() { InitializeComponent(); string[] ports = SerialPort.GetPortNames(); cmb_COM.Items.AddRange(ports); } private void btn_An_Click(object sender, EventArgs e) { serialPort1.PortName = cmb_COM.Text; serialPort1.Open(); timer1.Start(); } private void btn_Aus_Click(object sender, EventArgs e) { timer1.Stop(); serialPort1.Close(); } private void timer1_Tick(object sender, EventArgs e) { string werte = serialPort1.ReadTo("E"); char[] char1 = new char[] { 'T', 'F' }; string[] strings = werte.Split(char1); txt_Temp.Text = strings[1].ToString(); txt_Fuel.Text = strings[2].ToString(); } private void btn_Start_Click(object sender, EventArgs e) { timer1.Stop(); if (serialPort1.IsOpen) { serialPort1.WriteLine("s"); } else { MessageBox.Show("Port nicht göffnet"); } timer1.Start(); } } } vllt könnt ihr mir ja helfen was ich falsch mache gruß Dominic
Guck doch erst mal nach, ob überhaupt irgendwas im Empfnagspuffer steht: "BytesToRead" ReadTo ist eine blockierende Funktion, die den Progammablauf anhält, bis das gewünschte Zeichen empfangen wurde.
STK500-Besitzer schrieb: > Guck doch erst mal nach, ob überhaupt irgendwas im Empfnagspuffer steht: > "BytesToRead" Sehe ich auch so. Wahrscheinlich ist die Baudrate, Parity oder Datenbreite falsch eingestellt und es liegt garnichts im Eingangspuffer.
geht es denn von Hand?: http://www.der-hammer.info/pages/terminal.html so lange es im Terminal nicht sauber funktioniert würde ich auch auf Verbindungsprobleme tippen
Doch das passt alles sobald ich den Port öffne hängt das Formular, das heißt ich kann den Port nicht mehr schließen... Die Daten werden angezeigt und verändern sich auch wenn sich die Daten an der seriellen Schnittstelle Ändern. Mein Problem liegt also nur darin dass mein Formular sich aufhängt ich ich somit die Schnittstelle nicht mehr schließen kann und auch kein Startsignal Schicken kann.
Mach deinen SerialPort-Kram ggf. einfach in einem BackgroundWorker und update die UI von der DoWork des BackgroundWorkers aus via ReportProgress(). Dann friert dir die Oberfläche nicht ein, wenn .ReadTo() auf Daten wartet. Einen BackgroundWorker kann man wie den Timer in der Toolbox finden und einfach auf die Form ziehen. Zum BackgroundWorker wird man gut Tutorials finden können. (In Windows.Forms kann man in der Regel UI-Elemente nicht ohne weiteres von anderen Threads/BackgroundWorkern aus updaten, daher den Umweg über ReportProgress() oder Invokes gehen!)
Danke für Antwort jedoch hat das ganze nicht so funktioniert wie ich das wollte. mit dem ReportProgress() kann ich leider nur ein int übergeben und kein String und wenn ich das alles nur in den DoWork auslagere dann bekomme ich ebenso eine Fehlermeldung.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.