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

原创 2016年06月01日 10:21:14

有两种方式解决 
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#线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它

搞了个程序,结果报错了,好几不写C#的程序,生疏了,做个备份 在父窗体调用了子窗体的方法,该方法中用到了子窗体的控件,结果“线程间操作无效: 从不是创建控件“dataGridView1”的线...
  • small5e4444
  • small5e4444
  • 2016年11月16日 16:12
  • 1608

关于"从不是创建控件的线程访问它”

在WinForm开发过程中经常会用到线程,有时候还往往需要在线程中访问线程外的控件,比如:设置textbox的Text属性等等。如果直接设置程序必定会报出:从不是创建控件的线程访问它,这个异常。通常我...
  • findsafety
  • findsafety
  • 2014年12月18日 14:28
  • 3314

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

有两种方式解决  1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 2.使用Invoke等委托函数。 问题原因是。ne...
  • fengda2870
  • fengda2870
  • 2016年06月01日 10:21
  • 3798

线程间操作无效: 从不是创建控件的线程访问它

我们在用线程操作的时候,可能会出现异常:线程间操作无效: 从不是创建控件richTextBox1的线程访问它。因为windows窗体控件不是线程安全的,如果几个线程操作某一控件的状态,可能会使该控件的...
  • wangchao0605
  • wangchao0605
  • 2009年12月15日 13:47
  • 13145

解决“从不是创建控件的线程访问它”问题。

使用多线程提高 Windows 窗体应用程序的性能时,必须注意以线程安全方式调用控件。 示例 访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫...
  • xu_life
  • xu_life
  • 2017年02月21日 09:37
  • 353

线程间操作无效: 从不是创建控件的线程访问它的三种解决方法

今天遇到这个问题,百度了下,把解决的方法总结出来。 我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为: 线程间操作无效: 从不是创建控件“XXX”的线程访问它。   就我知道的有三...
  • jumtre
  • jumtre
  • 2015年04月07日 22:59
  • 20344

c#关于“线程间操作无效: 从不是创建控件的线程访问它”的问题

摘自:http://blog.csdn.net/hongkaihua1987/article/details/7439231            http://hi.baidu.com/jcse...
  • xu_life
  • xu_life
  • 2016年12月12日 14:30
  • 4364

其他信息: 线程间操作无效: 从不是创建控件“stateLabel”的线程访问它。解决办法

在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,有以下解决办法 1.可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 ...
  • LUOCHENLONG
  • LUOCHENLONG
  • 2016年10月08日 17:29
  • 3345

c# 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。解决方法

private delegate void daili(); String showtext = ""; private void show(String text) ...
  • ypwhs
  • ypwhs
  • 2015年01月14日 18:51
  • 2830

C#中线程间操作无效: 从不是创建控件 txtBOX 的线程访问它

delegate void 委托名(方法名); void 方法名() { if(txtBox.invokeRequered) { 委托名 d=new 委托名();...
  • u011555996
  • u011555996
  • 2016年11月13日 15:41
  • 853
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#c# 从不是创建控件 的线程访问它。
举报原因:
原因补充:

(最多只允许输入30个字)