C# Programm hängt bei Serial Port1.ReadTo

OP #6161405
Lesenswert?

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
Gast #6161493
Lesenswert?

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.
Gast #6161728
Lesenswert?

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.
Gast #6162418
Lesenswert?

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!)

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