С Новым годом!
Всем добра, удач, шуток, красот.
Уже как-то задавал вопрос, который здесь повторяю. Если есть что-то, что хотя бы косвенно может к нему отностиься, — выскажетесь пожалуйста:
Скажите пожалуйста, какое время определяет св-во ReadTimeout класса SerialPort.
Думал, что это время ожидания ответа. Но простая проверка опровергает.
В коде, приведенном ниже, MessageBox показывает 0. Причем 0 и в том случае, если модем выключен.
Но ведь порт не может знать включен или выключен модем. Он должен ждать 2000mc ответа.
И когда модем включен 0 — это странно. Даже если порт успел быстро получить ответ модема, то откуда он знает что это весь ответ и продолжения оного в течение назначенного времени ожидания не будет? Аналогичный вопрос по WriteTimeout: это время ожидания данных портом (аналогтчный код показывает — нет) или время, в течение которого данные с порта должны быть переданы устройству (модему) или что-то иное?
static SerialPort com = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
private void button1_Click(object sender, EventArgs e)
{
if (com.IsOpen) com.Close();
com.ReadTimeout = 2000;
com.WriteTimeout = 1400;
com.DtrEnable = true;
com.Open();
Thread.Sleep(1500);
com.Write("ATZ\r\n");
Thread.Sleep(500);
DateTime dt1 = DateTime.Now;
byte[] bytes = new byte[1000];
int ReadBytes = com.BytesToRead;
com.Read(bytes, 0, ReadBytes);
TimeSpan ts = DateTime.Now - dt1;
MessageBox.Show(ts.TotalMilliseconds.ToString());// показывает 0 (даже если модем выключен)
com.Close();
}