请教大家有什么方法可以避免新建一个form窗口导致串口数据接收卡顿的现象?

figoxwm 2018-07-19 10:14:02
我在用VS2010 开发一个C#的软件,用的是C#自带的串口控件,现在遇到一个问题如下
当我的软件只有一个form的时候,串口能顺利接收完成我与下位机发送过来的数据,但当我新建另一个form,这个form只是设置一些参数,结果在接收串口数据的时候就会出现卡顿,并且会丢掉一些数据。
是否是由于新建的form窗口,它实际上是建立了一个新的GUI线程,导致我在串口接收数据的时候,这个GUI线程打断了我的接收数据?
但我用this.Close();关闭了这个窗口,相当于我只有一个form窗口了,但结果还是一样会卡顿,数据丢失。网上查了下 Close()只是关闭了当前窗口的显示,并没有关闭这个线程。
我的串口接收数据的事件里里每接收一个数据,更新放在一个listview里面,使用了
this.Invoke((EventHandler)(delegate
{

更新listview的数据,现在不知道为什么新建一个FORM窗口就出现接收串口数据偶尔卡顿,但没有新的FORM窗口就完全没问题,这个情况怎么处理?谢谢
...全文
168 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wc19840730 2018-07-19
  • 打赏
  • 举报
回复
我觉得要窗口不卡,就得开另一个线程处理。优化自己的逻辑我觉得解决不了,我做过一些很简单的任务逻辑,也会有卡顿的感觉。轻微,但是有存在。除非是不交互的那种窗口。

jhone99 2018-07-19
  • 打赏
  • 举报
回复
是否开线程,是根据需要,不是赶时髦
jhone99 2018-07-19
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
串口接收数据是事件驱动的,没有数据到来时就不会触发事件。什么叫做“线程”,没有数据到来时怎么会有什么线程在执行?难道你弄了“死循环”在那里?


接收是事件触发,但接收数据处理有时很复杂,不能在接收事件里做,避免耽误接收,就需开个线程,在线程里做
  • 打赏
  • 举报
回复
另外,捕获变量的改变,也是使用事件(例如 INotifyPropertyChanged 设计模式之类的)驱动开发思路的。有的人为了一个变量事件也要搞一个什么线程“,难道程序中各种控件、组件有10万个事件就要有10万个线程?

如果滥用线程概念标题党,你刚一开发稍微复杂一点的软件就陷入泥潭了。这就是最初的编程模式就学错误了。
  • 打赏
  • 举报
回复
串口接收数据是事件驱动的,没有数据到来时就不会触发事件。什么叫做“线程”,没有数据到来时怎么会有什么线程在执行?难道你弄了“死循环”在那里?
jhone99 2018-07-19
  • 打赏
  • 举报
回复
新建线程,把串口接收处理放在线程里,你窗口操作也是个任务
figoxwm 2018-07-19
  • 打赏
  • 举报
回复
引用 1 楼 jhone99 的回复:
多线程来做,两个任务放在不同线程里

现在就只有一个任务啊,就是串口接收事件,另一个窗口我只是设置了一些参数,设置完就关闭这个窗口了。
jhone99 2018-07-19
  • 打赏
  • 举报
回复
多线程来做,两个任务放在不同线程里

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧