C# 串口接收数据在UI控件上显示不同步 15
我现在通过硬件发送数据波特率115200数据2秒一发。上位机接收数据用的是C#winform使用DataReceived这个自带的方法接收数据。前台用了一个RichTex...
我现在通过硬件发送数据 波特率115200 数据2秒一发 。上位机接收数据用的是C# winform 使用DataReceived 这个自带的方法接收数据。前台用了一个RichTextBox 控件显示。
我设置了一个变量 i 只要一进DataReceived 方法 自加一次,值赋给RichTextBox 。如果正确现在的显示就应该是RichTextBox的数一秒加一次 1,2,3,4.....一直加下去。但是现在的显示是1 ,3,,5,7, 9 , 12。但是自己实验了一下,开了一个定时器 一秒给RichTextBox 赋值 一次 就可以显示 !不知道为什么,感觉是因为跨线程更新控件比较慢!代码如下:
int i=0;SetValues_Thead a;
void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if(!com.Sp.IsOpen)
{
MessageBox.Show("Com Error");
}
if (rtb_Test.InvokeRequired)
{
i = i + 1;
this.Invoke(a,i);
}
else
{
rtb_Test.Text = i.ToString();
}
}
private delegate void SetValues_Thead(int i);
void SetValue(int k)
{
rtb_Test.Text = (i).ToString();
} 展开
我设置了一个变量 i 只要一进DataReceived 方法 自加一次,值赋给RichTextBox 。如果正确现在的显示就应该是RichTextBox的数一秒加一次 1,2,3,4.....一直加下去。但是现在的显示是1 ,3,,5,7, 9 , 12。但是自己实验了一下,开了一个定时器 一秒给RichTextBox 赋值 一次 就可以显示 !不知道为什么,感觉是因为跨线程更新控件比较慢!代码如下:
int i=0;SetValues_Thead a;
void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if(!com.Sp.IsOpen)
{
MessageBox.Show("Com Error");
}
if (rtb_Test.InvokeRequired)
{
i = i + 1;
this.Invoke(a,i);
}
else
{
rtb_Test.Text = i.ToString();
}
}
private delegate void SetValues_Thead(int i);
void SetValue(int k)
{
rtb_Test.Text = (i).ToString();
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询