C# 如何获取串行写入缓冲区的字节数?
C# How can I get number of byte on serial write buffer?
我想在标签上串行写入时打印字节数
所以我做了一个实时更新的定时器。
...
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 没有更新。
我在 Serial.Write 之前检查了计时器。它的启用 属性 在 tmr_Progress.Start();
之后变为真
但标签未更新。我如何获取串行写入缓冲区的字节数?
串口的Write方法将数据写入.NET Framework或设备驱动的缓冲区,几乎不消耗时间。
由于写入后定时器立即停止,因此不会发生定时器事件。
要产生定时器事件,删除after Write的"tmr_Progress.Stop ();",在定时器事件处理程序中当BytesToWrite变为0时调用它。
但是,如果有100毫秒的间隔,那么大部分数据已经发送完了。进度条有什么意义吗?
另外,显示的措辞是否合适? BytesToWrite 的值是要发送的缓冲区中剩余的字节数。
如果还想显示,应该先在label上显示sendByte.Length的值,紧接着Write using invokrequired and invoke如本文显示How to use SerialPort in .Net by using DataReceived event? DataReceived事件.
我想在标签上串行写入时打印字节数
所以我做了一个实时更新的定时器。
...
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 没有更新。
我在 Serial.Write 之前检查了计时器。它的启用 属性 在 tmr_Progress.Start();
之后变为真但标签未更新。我如何获取串行写入缓冲区的字节数?
串口的Write方法将数据写入.NET Framework或设备驱动的缓冲区,几乎不消耗时间。
由于写入后定时器立即停止,因此不会发生定时器事件。
要产生定时器事件,删除after Write的"tmr_Progress.Stop ();",在定时器事件处理程序中当BytesToWrite变为0时调用它。
但是,如果有100毫秒的间隔,那么大部分数据已经发送完了。进度条有什么意义吗?
另外,显示的措辞是否合适? BytesToWrite 的值是要发送的缓冲区中剩余的字节数。
如果还想显示,应该先在label上显示sendByte.Length的值,紧接着Write using invokrequired and invoke如本文显示How to use SerialPort in .Net by using DataReceived event? DataReceived事件.