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

阅读更多
个人分类: C#
上一篇C# 控制台输出
下一篇C# 解决串口关闭时程序卡死问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭