valdiz
01.12.2012, 17:57
Hallo zusammen.
Ich habe ein Problem mit meiner Anwendung, die über serielle Schnittstelle mit Mikrocontroller - in meinem Fall ist das C-Control - kommuniziert .
Die Anwendung basiert auf dem Beispiel aus diesen Forum "Beispiel Anwendung C# Zugriff auf SerialPort".
Das Programm funktioniert einwandfrei bis ich die Beenden-Taste drücke. Dannach hängt sich das Programm auf.
Der empfangende String ist "I\n". Das Zeichen I wird einmal übertragen und damit soll ein Teimer aktiviert werden.
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 Serila_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_DataRec eived); //DataRecieved Event abonnieren
}
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, System.IO.Ports.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();
}
}
}
Ich werde sehr froh wenn mir jemand hilft den Fehler zu finden.
Gruß
Valdiz.
Ich habe ein Problem mit meiner Anwendung, die über serielle Schnittstelle mit Mikrocontroller - in meinem Fall ist das C-Control - kommuniziert .
Die Anwendung basiert auf dem Beispiel aus diesen Forum "Beispiel Anwendung C# Zugriff auf SerialPort".
Das Programm funktioniert einwandfrei bis ich die Beenden-Taste drücke. Dannach hängt sich das Programm auf.
Der empfangende String ist "I\n". Das Zeichen I wird einmal übertragen und damit soll ein Teimer aktiviert werden.
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 Serila_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_DataRec eived); //DataRecieved Event abonnieren
}
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, System.IO.Ports.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();
}
}
}
Ich werde sehr froh wenn mir jemand hilft den Fehler zu finden.
Gruß
Valdiz.