简体   繁体   中英

How to read full bytes using port basestream

I am working on serial port communication. While using BaseStream I am writing and reading the port.

port.BaseStream.Write(dataItems, 0, dataItems.Length);
int receivedBytes = port.BaseStream.Read(buffer, 0, (int)buffer.Length);
Thread.Sleep(100);
var receiveData = BitConverter.ToString(buffer, 0, receivedBytes);

Hereafter write, I am sleeping the thread so that I will get full bytes. Is there any other way around that I can wait that all bytes are available?

Note

The last byte should be 22 . Also the above code is running in Task named as public async Task PortHitmethod(Iterations iterations)

This is certainly a wrong way to use Stream.Read . The correct pattern is in the documentation :

    Stream s = new MemoryStream();
    ...
    // Now read s into a byte buffer with a little padding.
    byte[] bytes = new byte[s.Length + 10];
    int numBytesToRead = (int)s.Length;
    int numBytesRead = 0;
    do
    {
        // Read may return anything from 0 to 10.
        int n = s.Read(bytes, numBytesRead, 10);
        numBytesRead += n;
        numBytesToRead -= n;
    } while (numBytesToRead > 0);
    s.Close();

PS If you think you should use Thread.Sleep then you can be sure you are certainly doing something wrong.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM