求助:为什么工作线程不能操作UI线程的控件

ouyangyc 2006-09-07 09:46:29
在网上看到很多的文章,都是说当工作线程需要更新一个UI控件时,一定要用Invoke或BeginInvoke切换到UI线程进行操作.

但是为什么要切换呢,不切换会造成什么样的后果呢,UI线程和工作线程又有什么区别呢?
...全文
275 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissknife 2006-09-12
  • 打赏
  • 举报
回复
另:MSDN的解释
访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。

.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationException,并提示消息:“从不是创建控件 control name 的线程访问它。”


所以2.0中要求使用invoke方法...
kissknife 2006-09-12
  • 打赏
  • 举报
回复
pretty_soft() 说的应是是二楼的愚翁老爷...
ouyangyc 2006-09-12
  • 打赏
  • 举报
回复
king94的blog,能给个地址吗?GOOGLE搜不到
pretty_soft 2006-09-09
  • 打赏
  • 举报
回复
去看king94的blog吧 上面说的很明白
包括解决方法
pretty_soft 2006-09-09
  • 打赏
  • 举报
回复
去看king94的blog吧 上面说的很明白
包括解决方法
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
用Invoke方法来操作
李洪喜 2006-09-09
  • 打赏
  • 举报
回复
在VS2003中就可以,在VS2005中不可以
ouyangyc 2006-09-08
  • 打赏
  • 举报
回复
但是为什么别的线程不能调用UI的东西呢
  • 打赏
  • 举报
回复
UI层是一线程,另新一个线程你不能跨线程访问UI,只能用异步、同步的方式调用
Knight94 2006-09-07
  • 打赏
  • 举报
回复
ref:
http://blog.csdn.net/Knight94/archive/2006/08/24/1111267.aspx

110,539

社区成员

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

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

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