Strange issue.
When I read from com-port with SerialPort.Read(), then if data arrive, only one byte is read on the first call, disregards of count
Because at the moment of reading, the other bytes didn't arrive, it will read only one byte because only one is there in the queue. So if at least one byte is there it won't wait for the required number of bytes since timeout has happened but it won't throw and exception. If none is there it will throw timeout exception. Therefore you should try reading until you read as many bytes as you need (10 in your case). You can try with something like this:
int count = 0;
var read = new byte[10];
while ((count += port.Read(read, count, read.Length - count)) != read.Length) ;
but what if timeout happens, maybe this can strengthen the code:
int count = 0;
var read = new byte[10];
while (count < read.Length)
{
try
{
count += port.Read(read, count, read.Length - count);
}
catch (TimeoutException te)
{
//maybe increase ReadTimeout or something, use exponential backoff, your call
}
}