C # Как я могу получить количество байтов в буфере последовательной записи? - PullRequest
0 голосов
/ 23 мая 2019

Я хочу напечатать число байтов при последовательной записи на этикетке

Поэтому я делаю таймер для обновлений в реальном времени.

    ...    
    System.Windows.Forms.Timer tmr_Progress = new System.Windows.Forms.Timer;
    tmr_Progress.Interval = 100;
    tmr_Progress.Tick += new EventHandler(tmr_Progress_Tick);   
    ...


    void tmr_Progress_Tick(object sender, EventArgs e)
    {
        lbl_Progress.Text = "Now Send : " + Serial.BytesToWrite;
    }

    ...

    private void serialWrite(byte[] sendByte )
    {
        try
        {
            tmr_Progress.Start();
            Serial.Write(sendByte, 0, sendByte.Length);
            tmr_Progress.Stop();
        }
        catch (Exception ex)
        {
            Trace.WriteLine("Write Error : " + ex.Message + " / " + ex.StackTrace);
        }
    }

Но tmer не работает и lable isnне обновляю.

Я проверяю таймер перед Serial.Write.Его свойство enable становится истинным после tmr_Progress.Start ();

, но метка не обновляется. Как я могу получить количество байтов в буфере последовательной записи?

1 Ответ

2 голосов
/ 23 мая 2019

Метод записи последовательного порта записывает данные в буфер .NET Framework или драйвера устройства и практически не тратит время.

Поскольку таймер останавливается сразу после записи, событие таймера не возникает.
Чтобы создать событие таймера, удалите "tmr_Progress.Stop ();"of after Write и вызывает его, когда BytesToWrite становится 0 в обработчике события таймера.

Однако, если интервал составляет 100 миллисекунд, большая часть данных будет отправлена.Есть ли какое-либо значение для индикатора прогресса?
Кроме того, отображается ли соответствующая формулировка?Значение BytesToWrite - это количество байтов, оставшихся в буфере для отправки.

Если вы все еще хотите отобразить, вы должны сначала отобразить значение sendByte.Length на метке сразу после записи, используя invokrequired, и вызывать, как показано на текстовом дисплее этой статьи. Как использовать SerialPort в.Net с помощью события DataReceived? Событие DataReceived.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...