忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false 您所在的位置:网站首页 onlyme什么意思 忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false

忽略跨线程访问的错误 CheckForIllegalCrossThreadCalls = false

2024-06-23 11:06| 来源: 网络整理| 查看: 265

CheckForIllegalCrossThreadCalls = false 允许跨线程访,但是此不稳定,要慎用

设置一个如下的界面,点击“button1”,改变label的值,改变label值是通过建立一个线程启动线程执行方法实现改变的,当在button的click事件函数里不加CheckForIllegalCrossThreadCalls = false这句话的时候,默认不允许跨线程访问,用异常捕获会提示: 线程间操作无效:从不是创建控件label的线程去访问它。 创建控件label的线程是页面启动的主线程,而我改变label的值是通过自己创建的另一个线程去访问,即是跨线程操作,系统不允许这么做 在这里插入图片描述 在这里插入图片描述 当在button的click事件中,加入这句话的时候Form1.CheckForIllegalCrossThreadCalls = false;发现,label的值改变了,系统也允许跨线程访问label了 在这里插入图片描述

给出验证不稳定性的一个例子:

即使已经加了Form1.CheckForIllegalCrossThreadCalls = false这句话,但是当我在button的click事件下连续两次调用自己创建的线程的时候,问题出现了,系统不提示不允许跨线程访问了,但是我改变label值的时候,提示到以下错误 ; 即:通过CheckForIllegalCrossThreadCalls的值忽略跨线程错误,但是这个时候会监测到异常 在这里插入图片描述 综上:不建议过多的使用允许跨线程访问,以下的附加的代码,关于用invoke方法解决该问题,参考下一篇博文 【使用invoke方法解决跨线程访问的问题】

// 通过CheckForIllegalCrossThreadCalls的值忽略跨线程错误,这时会抛出异常 private void button1_Click(object sender, EventArgs e) { Form1.CheckForIllegalCrossThreadCalls = false;//允许跨线程访问 //第一次调用 btn1 = new Thread(new ThreadStart(doThread)); btn1.IsBackground = true; btn1.Start(); Thread.Sleep(50); //第二次调用 // btn1 = new Thread(new ThreadStart(doThread)); // btn1.IsBackground = true; // btn1.Start(); } // 不使用invoke方法直接进入Control void doThread() { for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有