[ bigguy @ 25.01.2010. 22:31 ] @
Kada za prijem podataka na SerialPort-u koristim event serialPort_DataReceived() i kada podatke sa jednog SerialPorta saljem na drugi SerialPort, bilo kao byte[] ili kao string:
Code:

string text = "Ko_to_tamo_peva?"
byte[] msg = Encoding.ASCII.GetBytes(text);
serialPort1.Write(msg, 0, msg.Length);

ili
Code:

string text = "Ko_to_tamo_peva?"
serialPort1.WriteLine(text);

retko kad mi se desava da podaci budu kompletno primljeni. Npr., ako hocu da mi se podaci koji budu primljeni na serialPort1 ispisu na labeliReceived ja cu onda to uraditi ovako:
Code:

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        { 
            int bytes = serialPort1.BytesToRead;
            byte[] msg = new byte[bytes];
            serialPort1.Read(msg, 0, bytes);
            DISPLAY(Encoding.ASCII.GetString(msg));
        }

        [STAThread]
        public void DISPLAY(string text)
        {
            labelReceived.BeginInvoke(new EventHandler(delegate
                {
                    labelReceived.Text = "Data received: " + text;
                }));
        }

Problem je u tome sto podaci koji se ispisu na labelReceived cesto nisu kompletni. Obicno im fali koje slovo sa kraja poruke, da bi pri narednom slanju onda ispisao najpre ono sto je falilo u predhodnoj predaji podataka, pa tek onda nastavio sa ispisivanjem nove poruke, ali maltene, uz obavezu da opet fali koji karakter sa kraja poruke, i to tako sve u krug. Napomenucu da se ovo desava samo ukoliko postoje dva fizicka COM porta. Ukoliko se za citanje koda koristi samo emulator, odnosno virtualni serialPort, kod radi savrseno. Moje pitanje je sledece: kako da ja nateram COM port da procita najpre kompletnu poruku, pa tek onda da je ispise?