线程间的数据交换

weileCNM 2014-05-06 11:35:19
我现在一个程序,需要一个线程处理数据,有4个界面线程都是要从数据处理线程获得数据来做显示,请问有什么方法可以解决这个问题,小弟新学C#,求大神不吝赐教。
...全文
201 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-05-06
  • 打赏
  • 举报
回复
引用 3 楼 weileCNM 的回复:
[quote=引用 2 楼 wfy4422 的回复:] 你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
上次我自己试验了,一个线程发布数据到界面线程,界面线程处理数据,提示程序奔溃,说是不能直接操作界面,这个是什么原因啊?[/quote] 你不能在线程里去改界面的控件,只能是去调数据. 界面的控件是界面的线程控制的. 另外,你到底是有4个界面,还是1个界面4个线程? 只有1个界面,为什么要用4个线程来对它操作?
shawn_yang 2014-05-06
  • 打赏
  • 举报
回复
回调函数返回
weileCNM 2014-05-06
  • 打赏
  • 举报
回复
引用 3 楼 weileCNM 的回复:
[quote=引用 2 楼 wfy4422 的回复:] 你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
上次我自己试验了,一个线程发布数据到界面线程,界面线程处理数据,提示程序奔溃,说是不能直接操作界面,这个是什么原因啊?[/quote] 我当时是用的事件处理方式!
weileCNM 2014-05-06
  • 打赏
  • 举报
回复
引用 2 楼 wfy4422 的回复:
你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
上次我自己试验了,一个线程发布数据到界面线程,界面线程处理数据,提示程序奔溃,说是不能直接操作界面,这个是什么原因啊?
wfy4422 2014-05-06
  • 打赏
  • 举报
回复
你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
於黾 2014-05-06
  • 打赏
  • 举报
回复
只是显示的话,将处理的数据放到全局,直接用就行了啊
wfy4422 2014-05-06
  • 打赏
  • 举报
回复
引用 3 楼 weileCNM 的回复:
[quote=引用 2 楼 wfy4422 的回复:] 你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
上次我自己试验了,一个线程发布数据到界面线程,界面线程处理数据,提示程序奔溃,说是不能直接操作界面,这个是什么原因啊?[/quote] 你这数据线程是确实不能直接操作UI界面的控件的,要用委托,这叫封送处理。 http://www.cnblogs.com/Peter-Zhang/archive/2011/09/17/2179892.html
weileCNM 2014-05-06
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
[quote=引用 3 楼 weileCNM 的回复:] [quote=引用 2 楼 wfy4422 的回复:] 你可以在取数据线程里取完数据之后,直接推结果到界面,也可以推到一个公共的地方,比如全局变量,界面线程定时取就行了。或者取数据线程的代码放到一个类中,类中定义事件,取完数据触发,界面层绑定事件处理程序显示。最简便的方法,用自带的backgroundworker组件
上次我自己试验了,一个线程发布数据到界面线程,界面线程处理数据,提示程序奔溃,说是不能直接操作界面,这个是什么原因啊?[/quote] 你不能在线程里去改界面的控件,只能是去调数据. 界面的控件是界面的线程控制的. 另外,你到底是有4个界面,还是1个界面4个线程? 只有1个界面,为什么要用4个线程来对它操作?[/quote] 我有四个界面,一个线程,当时我是做个试验的小程序,我不是在线程里控制界面的,我是在消息接收函数里控制线程的

111,097

社区成员

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

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

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