Announcement

Collapse
No announcement yet.

SerialPort und Invoke

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SerialPort und Invoke

    Hallo zusammen.

    Ich habe ein Problem mit meiner Anwendung, die über serielle Schnittstelle mit Mikrocontroller - in meinem Fall ist das C-Control - kommuniziert .

    Das Programm funktioniert einwandfrei bis ich die Beenden-Taste drücke. Dannach hängt sich das Programm auf, aber nur wenn der Timer gestartet wird.
    Also das Problem hängt schon mit dem Timer zusammen.
    Der empfangende String ist "I\n". Das Zeichen I wird einmal übertragen und damit soll ein Timer aktiviert werden.

    Könnte mir jemand bitte helfen den Fehler zu finden?
    Gruß
    Valdiz.

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    using System.IO;
    
    namespace SerialPort_mit_Invoke
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                if (!serialPort1.IsOpen)
                {
                    serialPort1.Open(); //Serialport öffnen
                }
                recievedDelegate = new InvokeDelegate(InvokeRecieved);
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); 
            }
    
            delegate void InvokeDelegate(string Data);
    
            InvokeDelegate recievedDelegate;
    
    
            void InvokeRecieved(string Data)
            {
                listBoxRecieved.Items.Add(Data);
                if (Data[0] == 'I')
                {
                    timer1.Start();
                    Data = "";
                }
    
            }
    
    
            private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                string RecievedLine = " ";
                while (RecievedLine != "")
                {
                    RecievedLine = serialPort1.ReadLine();
                    listBoxRecieved.Invoke(recievedDelegate, new object[] { RecievedLine });
                }
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                    if (label_störung.BackColor != Color.Orange)
                    {
                        label_störung.BackColor = Color.Orange;
                        label_störung.ForeColor = Color.Orange;
                    }
    
                    else
                    {
                        label_störung.BackColor = Color.Red;
                        label_störung.ForeColor = Color.Black;
                    }
                
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Stop();
                Close();
            }
        }
    }

  • #2
    http://www.roboternetz.de/community/...nvoke?p=565591
    geschlossen
    Christian

    Comment

    Working...
    X