Hi, i did an application on C# that send and receive data in the same time, the application is built with C# on visula studio 2008 smart device application.
i have to communicate with an external component. so i send data via a "PDA to this component" , and the componenet send me data after it receive data sent by my pda.
the problem is that my application can't receive all the data sent by this component. there is some missed data.
i shoud receive this data "6 6 2 83 71 0 1 3 209 41" but me i receive "2 63 71 0 63 209 41"
plaese help. thanks Smile | :)
here is my code
private void button2_Click(object sender, EventArgs e)
{
Thread.Sleep(70);
serialPort1.Write(new byte[] { 65 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 18 }, 0, 1);
Thread.Sleep(70);
serialPort1.Parity = Parity.Odd;
serialPort1.Write(new byte[] { 2 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 91 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 69 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 3 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 3 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 66 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 65 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 17 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 6 }, 0, 1);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
while (serialPort1.BytesToRead >5)
{
data = serialPort1.ReadExisting();
char[] charValues = data.ToCharArray();
foreach (char _eachChar in charValues)
{
value = (_eachChar);
data2 += String.Format("{0:X}", value + " ");
}
this.Invoke(new EventHandler(display_data_event));
data2 = "";
}
}
private void display_data_event(object sender, EventArgs e)
{
textBox2.Text = data;
textBox4.Text = data2;
}
What I have tried:
private void button2_Click(object sender, EventArgs e)
{
//first data
Thread.Sleep(70);
serialPort1.Write(new byte[] { 65 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 18 }, 0, 1);
Thread.Sleep(70);
// here i should get the nubmer 6 from the receiver
serialPort1.Parity = Parity.Odd; ////////
// second data
serialPort1.Write(new byte[] { 2 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 91 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 69 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 3 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 3 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 66 }, 0, 1);
Thread.Sleep(70);
// here i should get 6 from the receier
//third data
serialPort1.Write(new byte[] { 65 }, 0, 1);
Thread.Sleep(70);
serialPort1.Write(new byte[] { 17 }, 0, 1);
Thread.Sleep(70);
// here i should get 2 83 71 0 1 3 209 41
// last data
serialPort1.Write(new byte[] { 6 }, 0, 1);
//serialPort1.Parity = Parity.None; ////////
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
while (serialPort1.BytesToRead >5)
{
data = serialPort1.ReadExisting();
char[] charValues = data.ToCharArray();
foreach (char _eachChar in charValues)
{
value = (_eachChar);
data2 += String.Format("{0:X}", value + " ");
}
this.Invoke(new EventHandler(display_data_event));// fonction temps réel
data2 = "";
}
}
private void display_data_event(object sender, EventArgs e)
{
textBox2.Text = data;
textBox4.Text = data2;
}