Witam, mam problem jak w temacie a dokładniej W polu richtextbox zawsze otrzymuje co 1 sek 18 znakowy string i zawsze pisze bezpłędnie ten napis, natomiast gdy chce do label12 wczytać jego długość wychodzą krzaki raz 18 raz 10 raz 4 itd. Co może być nie tam. I czasem zauważyłem że jak dłużej pochodzi program to nie mogę zamknąć portu. Poniżej kod:
private void butCon_Click(object sender, EventArgs e)
{
try
{
serialPort1.Open();
if (serialPort1.IsOpen)
{
butCon.Enabled = false;
butDecon.Enabled = true;
kontrolka.FillColor = System.Drawing.Color.Green;
comboBox1.Enabled = false;
comboBox2.Enabled = false;
comboBox3.Enabled = false;
comboBox4.Enabled = false;
comboBox5.Enabled = false;
}
}
catch (Exception exc)
{
MessageBox.Show("Błąd połączenia:\n" + exc.Message);
}
}
private void butDecon_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
butCon.Enabled = true;
butDecon.Enabled = false;
kontrolka.FillColor = System.Drawing.Color.Red;
comboBox1.Enabled = true;
comboBox2.Enabled = true;
comboBox3.Enabled = true;
comboBox4.Enabled = true;
comboBox5.Enabled = true;
timer1.Enabled = false;
}
this.Refresh();
}
private void Form1_Load(object sender, EventArgs e)
{
//*-- WCZYTANIE DOSTĘPNEJ LISTY PORTÓW COM DO COMBOBOXA **--/
string[] port = System.IO.Ports.SerialPort.GetPortNames();
foreach (string item in port)
{
comboBox1.Items.Add(item);
}
if (comboBox1.Items.Count == 0)
{
MessageBox.Show("Nie wykryto żadnego portu COM");
}
else
{
comboBox1.Text = port[0]; //pierwszym elementem wyswietlanym w comboboxie będzie pierwszy port
}
// this.comboBox1.Text = serialPort1.PortName;
this.comboBox2.Text = serialPort1.BaudRate.ToString();
this.comboBox3.Text = serialPort1.Parity.ToString();
this.comboBox4.Text = serialPort1.DataBits.ToString();
this.comboBox5.Text = serialPort1.StopBits.ToString();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void DisplayText(object sender, EventArgs e)
{
richTextBox1.AppendText(RxString);
label12.Text = RxString.Length.ToString();
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting(); // przekazanie odebranego łańcucha do zmiennej rx_str
this.Invoke(new EventHandler(DisplayText)); //instalacja zdarzenia parsującego odebrany łańcuch
// }
}