C#如何获取串行写入缓冲区上的字节数?

C#如何获取串行写入缓冲区上的字节数?,c#,timer,serial-port,serial-communication,C#,Timer,Serial Port,Serial Communication,我想在标签上进行串行写入时打印字节数 所以我做了一个计时器来实时更新 ... 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_Prog

我想在标签上进行串行写入时打印字节数

所以我做了一个计时器来实时更新

    ...    
    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不起作用,标签也不更新

我在串行写入之前检查计时器。它的enable属性在tmr_Progress.Start()之后变为true


但是标签并没有更新。。如何获取串行写入缓冲区上的字节数?

串行端口的写入方法将数据写入.NET Framework或设备驱动程序的缓冲区,几乎不占用时间

由于计时器在写入后立即停止,因此不会发生计时器事件。
要生成计时器事件,请删除after Write的“tmr_Progress.Stop();”,并在计时器事件处理程序中的BytesToWrite变为0时调用它

但是,如果间隔为100毫秒,则大部分数据都已发送。进度指标有什么意义吗?
此外,显示的措辞是否合适?BytesToWrite的值是缓冲区中要发送的剩余字节数


如果仍要显示,您应该在写入后立即使用invokrequired和invoke在标签上显示sendByte.Length的值,如本文DataReceived事件的文本显示所示。

串行端口的写入方法将数据写入.NET Framework或设备驱动程序的缓冲区,并且几乎不消耗时间

由于计时器在写入后立即停止,因此不会发生计时器事件。
要生成计时器事件,请删除after Write的“tmr_Progress.Stop();”,并在计时器事件处理程序中的BytesToWrite变为0时调用它

但是,如果间隔为100毫秒,则大部分数据都已发送。进度指标有什么意义吗?
此外,显示的措辞是否合适?BytesToWrite的值是缓冲区中要发送的剩余字节数

如果仍要显示,则应在写入后立即使用invokrequired和invoke在标签上显示sendByte.Length的值,如本文DataReceived事件的文本显示所示