关闭

C#c# 从不是创建控件 的线程访问它。

2446人阅读 评论(0) 收藏 举报
分类:

有两种方式解决 
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)
{
    if (this.btn.InvokeRequired)
    {
        myDelegate md = new myDelegate(this.setRich);
        this.Invoke(md, new object[] { bl });
    }
    else
        this.btn.Visible = bl;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1349447次
    • 积分:20227
    • 等级:
    • 排名:第412名
    • 原创:797篇
    • 转载:87篇
    • 译文:2篇
    • 评论:120条
    文章分类
    文章存档