winform 串口接收 跨线程如何解决 ?

amnoone 2022-12-17 12:24:25

我在 winform窗体 拖入一个   serialPort1 控件

 

在serialPort1 的事件  serialPort1_DataReceived 想要实现  收到数据后 在 textbox中 显示出来

textBox1.Text =  serialPort1.ReadExisting();  

报错 说 夸线程错误 

请老师指导一下  (// System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;   不想用)

我专门学了 delegete   以及 action  func  

针对 串口接收  对不住  逻辑。  请老师指点,最好请用 action 或 func  。

 

 

...全文
199 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaxub 2022-12-23
  • 打赏
  • 举报
回复 2

textBox1.Invoke(new action(delegate { textBox1.text="内容"}));

six2me 2022-12-22
  • 打赏
  • 举报
回复 1

private delegate void AppendTextSTRDelegate(string message);
public void AppendTextSTR(string ss)
{
if (rec.InvokeRequired)
{
AppendTextSTRDelegate d = AppendTextSTR;
rec.Invoke(d, ss);
}
else
{
rec.AppendText(ss);
}
}
在你接收到数据的地方调用 AppendTextSTRDelegate(string) 就OK,我的串口程序都是使用这么委托实现的.

wanghui0380 2022-12-18
  • 打赏
  • 举报
回复 1

这个年代,我们只会回复这个年代的解决方法(汽车都普及了,俺们就不会在去说啥怎么喂驴,赶马车的技术。)

这个年代,你可以这样做

Channel<int> channel = Channel.CreateUnbounded<int>();
...
ChannelReader<int> c = channel.Reader;
while (await c.WaitToReadAsync()) //都知道await会自动切换上下文的,所以你在一个正常写的代码里(非某些人天天告诉的你那些赶马车的‘秘籍’)
{
    if (await c.ReadAsync(out int item))
    {
         // process item...
    }
}

shengtou
ps:至于那些赶马车的有些落寞,我们说落寞就落寞把,当年有个片子叫神鞭,也许这些喜欢赶马车的应该看看。谁说剪掉辫子就不神了,把神留着就好

WyM丶 2023-02-03
  • 举报
回复
@wanghui0380 麻烦问一下 这个适用.net framework框架吗?

111,090

社区成员

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

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

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