C#窗体中十几个label要在串口事件中更新?如何快捷安全实现?
C#窗体中十几个label要在串口事件中更新?如何快捷安全实现?一个控件一个控件的委托?或者还是有更好的方法,有知道的大侠吗? 一次指令更新几十个lable,还是多条指令更新几十个lable,一次的话就this.invoke((eventhandler)delegate{ lab1=*;lab2=*;lab3=*; }) 或者推送数据到一个单独的队列线程,在线程里批量委托处理 串口事件只更新标记,刷新gui在另外一个线程独立执行就行。我用这种方式的串口收数据,500hz的帧率,跑半天也不会丢帧。对我来说做测试够用了。 Invoke(new Action(() =>{设置窗体相关控件(例如文本框等等)})) 反正在delphi里串口在线程中通信,线程内部的事件可以用Sync更新form,而且必须用sync更新,否则会有内存访问问题 天下乌鸦一般黑 发表于 2022-8-22 17:00
串口事件只更新标记,刷新gui在另外一个线程独立执行就行。
我用这种方式的串口收数据,500hz的帧率,跑半 ...
(引用自3楼)
你这方法要搞个全局变量的标志才行吧。。。感觉不正统,这么搞所有的变量都要备份一个 ,留在另外一个线程用于更新。 gallop020142 发表于 2022-8-22 20:08
Invoke(new Action(() =>{设置窗体相关控件(例如文本框等等)}))
(引用自4楼)
有没有代码示例呀? fbwcpu 发表于 2022-8-22 21:02
有没有代码示例呀?
(引用自7楼)
C#就是我上面的代码 control.invoke((eventhandler)delegate{...})这个是同步委托的,begininvoke是异步委托,速度不快频率不高串口收完数据直接调用就行了,数据量频繁的开个线程,串口收到数据把数据推送到队列,然后在那个线程里处理队列数据更新UI fbwcpu 发表于 2022-8-22 21:02
有没有代码示例呀?
(引用自7楼)
Invoke(new Action(() =>{设置窗体相关控件(例如文本框等等)}))
举个例子:
在一个自己新开的线程里面,想要修改一个richtextbox,
如果直接 richtextbox.AppendText("blabla"); 就会报错;
需要换成:
Invoke(new Action(() =>{richtextbox.AppendText("blabla");})) label更新频率不高,我以前都是跨线程直接调用,都是自用工具而已{:titter:}
页:
[1]