求大佬教教foreach

Lqs98 2021-01-06 09:41:48
我现在是在foreach中添加了委托来循环生成控件,foreach是用来接收设备传来的信息的,结果一用委托就接收不到设备传的信息
...全文
5917 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
datafansbj 2021-01-13
  • 打赏
  • 举报
回复
你都 return 了,接收信息的函数(jieshou)执行结束了,当然不会再接收信息了。
八爻老骥 2021-01-06
  • 打赏
  • 举报
回复
内存溢出了吧?
Lqs98 2021-01-06
  • 打赏
  • 举报
回复
如果是在foreach里直接循环生成panel会直接报在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级
Lqs98 2021-01-06
  • 打赏
  • 举报
回复
引用 4 楼 晨易夕 的回复:
你直接写在循环里肯定是子线程无法访问UI线程的控件了。 你写在委托里,当然可以,但是可以使用匿名函数,函数体直接写在foreach中,比如:
int a = 0;
                            this.Invoke(delegate ()
                            {
                                a = 1;
                                Console.WriteLine(a);
                            });
只需要注意解决闭包产生的变量作用域提升带来的问题就行了。
我在Form1Load里会调用jieshou这个线程,从而达到不断接收设备传信息的目的,也就是因为这样不得不在foreach里用委托的方式创建线程,不然就会报在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级
Lqs98 2021-01-06
  • 打赏
  • 举报
回复
引用 4 楼 晨易夕 的回复:
你直接写在循环里肯定是子线程无法访问UI线程的控件了。 你写在委托里,当然可以,但是可以使用匿名函数,函数体直接写在foreach中,比如:
int a = 0;
                            this.Invoke(delegate ()
                            {
                                a = 1;
                                Console.WriteLine(a);
                            });
只需要注意解决闭包产生的变量作用域提升带来的问题就行了。
大佬,我有点不懂你得意思,我的意思是我在foreach里可以使用 K3Infos.Key.值,来获取我想要的值,我在Form界面上也可以得到(前提是是在界面拖出来而不是代码循环出来的),但是我用委托循环生成控件的话是拿不到我要的值的,调试信息里没有值。这个foreach是不断接收设备传来的信息然后通过K3Infos.Key.值来获取值。
晨易夕 2021-01-06
  • 打赏
  • 举报
回复
你直接写在循环里肯定是子线程无法访问UI线程的控件了。 你写在委托里,当然可以,但是可以使用匿名函数,函数体直接写在foreach中,比如:
int a = 0;
                            this.Invoke(delegate ()
                            {
                                a = 1;
                                Console.WriteLine(a);
                            });
只需要注意解决闭包产生的变量作用域提升带来的问题就行了。
Lqs98 2021-01-06
  • 打赏
  • 举报
回复
引用 2 楼 icoolno1 的回复:
内存溢出了吧?
我是刚开始学这个之前没接触过我现在主要是想在foreach里直接循环生成panel但是他会直接报在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级,头大

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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