C#c# 从不是创建控件 的线程访问它。
有两种方式解决
1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;
2.使用Invoke等委托函数。
问题原因是。net2.0以后拒绝多线程访问空间,避免空间造成死锁。以前Control.CheckForIllegalCrossThreadCalls =false;默认就是这样,现在默认为true。
如果不会好几个线程同时操作一个控件用方法1就可以。如果存在多个线程一起操作控件使用方法2
例如:btn.Visible=false; 改为:this.setRich(false);
private delegate void myDelegate(bool bl);
private void setRich(bool bl)
{undefined
if (this.btn.InvokeRequired)
{undefined
myDelegate md = new myDelegate(this.setRich);
this.Invoke(md, new object[] { bl });
}
else
this.btn.Visible = bl;
}
文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fengda2870/article/details/51553975
- 点赞
- 收藏
- 关注作者
评论(0)