C# Winform 多线程界面假死

z_zhi 2013-05-07 09:11:36
小弟碰到一个问题 需求是这样的 主线程和工具类写在不同的两个文件里,主线程方法主要就是更新界面,在工具类里开了一个线程专门处理一些耗时的工作
现在想要在工具类处理完所有工作之后在UI线程调用更新UI的方法,类似同步程序一样,UI线程需要等待工作线程的结果,又不希望在工作线程处理时界面被阻塞假死。

尝试过在主线程所在文件开新的工作线程在结束时直接在工作线程调用更新界面方法 调用完之后涉及的控件都会莫名消失 不知什么原因 应该是假死了,后来测试了下由主线程调用更新界面的方法控件都正常,在工作线程里调用则会出现上述现象。

请问这种情况应该如何处理,如果我没有解释清楚的地方请跟帖 十分感谢!! 或者加Q 281881226直接看下代码也可
...全文
338 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010594009 2013-05-07
  • 打赏
  • 举报
回复
1楼的方法足以解决子线程控制线程控件的问题。 如果子线程在操作主线程的控件时控件消失或者出现大红X,说明子线程更新控件的逻辑有问题。 例如,子线程要更新gridview,实际上是要更新gridview.datasourse=xxx中的xxx,而不是gridview.datasourse
叨叨猫 2013-05-07
  • 打赏
  • 举报
回复
线程之间有保护,请看这篇文章http://blog.csdn.net/aaaaatiger/article/details/3430672
我要坚强 2013-05-07
  • 打赏
  • 举报
回复
//线程中使用 this.BeginInvoke(new Action(() => { //操作主线程控件 }) );
shenlanql 2013-05-07
  • 打赏
  • 举报
回复
线程中通过Invoke 方法调用刷新界面处理。 具体可以网上搜下。 给你一个链接,你参考下,应该是你要的东西。http://www.cnblogs.com/yjg8116/archive/2011/12/22/2298398.html
qq598235031 2013-05-07
  • 打赏
  • 举报
回复
主要是你的业务逻辑出了问题,工作线程做IO操作耗时过长,导致界面未被更新。或者你的工作线程更新界面时候主线程也更新界面,再者你的工作线程更新界面方法出了毛病。
残月照我心 2013-05-07
  • 打赏
  • 举报
回复
听说,帮顶有分拿,就来了
z_zhi 2013-05-07
  • 打赏
  • 举报
回复
引用 3 楼 u010594009 的回复:
1楼的方法足以解决子线程控制线程控件的问题。 如果子线程在操作主线程的控件时控件消失或者出现大红X,说明子线程更新控件的逻辑有问题。 例如,子线程要更新gridview,实际上是要更新gridview.datasourse=xxx中的xxx,而不是gridview.datasourse
这边gridview到没有出现什么问题 消失的是界面上面的一些label和按钮 这些label和按钮都是在调用的方法里设置属性。。然后就消失了。。

110,534

社区成员

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

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

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