C#中控件跨线程修改Visible属性

xxxrebel 2015-09-19 03:00:43
在主线程中创建了一个usercontrol,然后panel有一个status标签,用于显示一些状态。还有一个captcha用于显示验证码,当验证码不存在的时候captcha也就是隐藏的。
然后delegate委托,委托的callback对status.Text修改是正常的,但是captcha.Visible=true就会出现问题。
显示不了,而且程序的所有控件都无法操作了。

调用的时候是储存了control对象,然后在control对象中有public的属性对control内的控件进行修改。
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
除了text,color也是不需要通过invoke就可以的,至于原因我就不了解了
xxxrebel 2015-09-19
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
Action act=()=>{captcha.Visiable=false;}; captcha.Invoke(act);
感谢,这样的确可以! 但是为什么我修改Text属性却不需要使用Invoke调用呢?
xxxrebel 2015-09-19
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
写这么多,起码应该贴出10几行可执行代码来说明啊。 你调试了吗?或者 Debug.Print 方式打印调试日志。看到有死循环的现象了吗?
MyControl control = new MyControl(); EventManager em = new EventManager (control); em.Initialize(); // 初始化 以对控件添加操作 em中会为control公共控件绑定操作 操作就是一个委托 EventManager 对象中: MyDelegate md = new MyDelegate(this.action); md.BeginInvoke(new AsyncCallback(this.actioncallback), null); 然后EventManager 的actioncallback this.control.updateStatus("显示状态..."); this.control.showCaptcha("CAPTCHA"); // 这一步会出错 显示不了 然而如果我在Initialize里面加上showCaptcha是可行的
  • 打赏
  • 举报
回复
Action act=()=>{captcha.Visiable=false;}; captcha.Invoke(act);
  • 打赏
  • 举报
回复
你要在委托里面再用Invoke去调用委托设置,或者你设置那个不检查控件是否被跨线程操作的全局属性
  • 打赏
  • 举报
回复
写这么多,起码应该贴出10几行可执行代码来说明啊。 你调试了吗?或者 Debug.Print 方式打印调试日志。看到有死循环的现象了吗?
 Posted on 2008-03-17 14:01 ILCW 阅读(653) 评论(0)  编辑 收藏 所属分类: .NET

110,534

社区成员

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

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

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