首页 新闻 会员 周边

C# 多线程与UI响应

0
悬赏园豆:15 [已解决问题] 解决于 2012-07-13 09:28

C# 多线程与UI响应 的时候.
我的程序有两个线程,一个主线程,一个通信线程.
通信线程会更新大量UI界面.
因为.net 禁止跨线程访问.所有我用委托来解决跨线程.
但是碰到一个问题,就是UI界面会有卡壳,滞后的现象.
这个怎么解决呢?

问题补充:

更新频率不高,我每次都有加sleep 延迟.

数据量也还好,10几个INT ,STRING 类型的变量.

主要是子线程执行函数的时候,出现主线程(ui线程)的停顿.

鲤伴先生的主页 鲤伴先生 | 初学一级 | 园豆:9
提问于:2011-10-11 19:18
< >
分享
最佳答案
0

这种情况你可以试试异步,就是使用 BeginInvoke ,PS:如果数据更新太频繁了,可以使用定时器更新。UI现场和工作者线程使用一个同步锁,工作者线程锁定同步对象,然后把数据放到缓冲区里面。UI线程的定时器执行的时候也锁定同步对象,检测缓冲区是否改变,如果改变则进行更新窗口。

收获园豆:15
归真 | 小虾三级 |园豆:605 | 2011-10-17 09:54
其他回答(4)
0

是不是性能问题?

小小刀 | 园豆:1991 (小虾三级) | 2011-10-11 20:49

不是,我 的电脑很好.是E5200的Cpu

支持(0) 反对(0) 鲤伴先生 | 园豆:9 (初学一级) | 2011-10-12 13:38
0

要解决UI假死或无响应的状况,还需要一个线程。这篇文章可以帮助你

http://www.cnblogs.com/iamzhanglei/archive/2010/01/08/1642411.html

【当耐特】 | 园豆:645 (小虾三级) | 2011-10-13 10:04
0

你说的不是很清晰。
是因为更新频率高而界面假死,还是因更新数据量太大而单次的停顿?
要说得清楚些才能帮你……

Higel | 园豆:464 (菜鸟二级) | 2011-10-13 16:28

更新频率不高,我每次都有加sleep 延迟.

数据量也还好,10几个INT ,STRING 类型的变量.

主要是子线程执行函数的时候,出现主线程(ui线程)的停顿.

支持(0) 反对(0) 鲤伴先生 | 园豆:9 (初学一级) | 2011-10-14 08:54

那就不应该出现UI停顿了……你不是把sleep加到invoke那个方法里了吧?

支持(0) 反对(0) Higel | 园豆:464 (菜鸟二级) | 2011-10-14 12:53
0

顶楼上的。

不过感觉你遇到的问题应该还存在别的问题,能不能把你更新UI数据代码贴出来。

胡屯 | 园豆:714 (小虾三级) | 2011-12-22 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册