C# 异常:已引发: "线程间操作无效: 从不是创建控件“textBox1”的线程访问它。" (System.InvalidOperationException)

2023-11-06

当使用多线程功能时,在子线程里修改UI控件参数时,如:

textBox1.Text += str;

会引发异常。

异常:已引发: "线程间操作无效: 从不是创建控件“textBox1”的线程访问它。" (System.InvalidOperationException)
引发了一个 System.InvalidOperationException: "线程间操作无效: 从不是创建控件“textBox1”的线程访问它。"
时间: 2019/2/19 16:22:58
线程: <无名称>[11580]

解决方法之一是,在构造函数处添加代码System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;禁止捕获对错误线程的调用。

 public Form1()
        {
            InitializeComponent();
			System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }

不过上面这个方法并不是微软推荐的,所以采用委托的方式如下:

this.Invoke(new EventHandler(delegate
{
	textBox1.Text += str;
}));

因为该子线程不是UI的创建者,所以子线程应该使用一个委托让UI线程来执行textBox1.Text += str操作。
其中EventHandler是一个事件委托,其定义如下:

using System.Runtime.InteropServices;

namespace System
{
    // 摘要: 
    //     表示将处理不包含事件数据的事件的方法。
    //
    // 参数: 
    //   sender:
    //     事件源。
    //
    //   e:
    //     不包含任何事件数据的 System.EventArgs。
    [Serializable]
    [ComVisible(true)]
    public delegate void EventHandler(object sender, EventArgs e);
}

如果对委托类型不了解,也可以直接按照Lamda表达式的写法,改写成如下形式。

this.Invoke(new Action(() =>
{
	textBox1.Text += str;
}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 异常:已引发: "线程间操作无效: 从不是创建控件“textBox1”的线程访问它。" (System.InvalidOperationException) 的相关文章

随机推荐

  • 超详细的VsCode创建SpringBoot项目(图文并茂)

    文章目录 超详细的VsCode创建SpringBoot项目 图文并茂 一 安装jdk 1 OpenJDK 2 Java SE Development Kit 8 二 安装maven 1 下载 2 配置环境变量 可选 3 修改settings
  • Python UI自动化 —— 关键字+excel表格数据驱动

    步骤 1 对selenium进行二次封装 创建关键字的库 2 准备一个表格文件来写入所有测试用例步骤 3 对表格内容进行读取 使用映射关系来对用例进行调用执行 4 执行用例 1 对selenium进行二次封装 创建关键字的库 from ti
  • java自定义高效map转json逻辑实现

    场景 笔者发现后端对网页提供的json接口数据 都不是特别复杂 所以为了提高json的转换效率 在笔者自己写的struts 1 0 0框架里 自主实现了一个map转json的类 内部返回值都是map封装 效率非常高 基本不会超过1ms 望大
  • win10——‘’WLAN‘’没有有效的IP配置

    前言 小编的笔记本最近突然连不上无线网了 本来用的好好的 突然不能用了 有点不得劲 不得劲就得给他搞得劲了 先看看小编的错误 然后再给您展示我的解决方案 错误提示 连不上网很难受 但是解决了肯定很爽 由于小编也没有遇到过这个问题 所以小编就
  • 全网最细之HiveQL语句操作

    HiveQL语句操作 关键字尽量大写 但是本人小写容易记忆 所以本篇为小写 数据库 创建一个数据库 查看数据库 修改数据库信息 删除数据库 普通表 创建表 查看表 修改表名 添加n列 修改表 修改位置 单独修改列名 数据类型 替换列 删除n
  • 面试问题回答集锦

    多个过滤类和排序类可以公用 filter backends 可以配置多个 执行顺序是从左往后 所以放在最左侧的尽量先过滤掉大部分数据 问 在工作中遇到注入多个分类排序的接口情况 如何解决 在写xx接口的时候 因为我们过滤的条件很多 搜索数据
  • Flutter和原生iOS调用相册

    文章链接 https juejin cn post 6908232699673722888 目的 实现一个flutter调用原生ios相册的功能 并传递照片 flutter的操作 flutter用来传递的模块叫channel 这里我们使用M
  • 求组合算法-----m个元素中选n个

    组合算法 本程序的思路是开一个数组 其下标表示1到m个数 数组元素的值为1表示其下标 代表的数被选中 为0则没选中 首先初始化 将数组前n个元素置1 表示第一个组合为前n个数 然后从左到右扫描数组元素值的 10 组合 找到第一个 10 组合
  • 蓝桥杯 寻找2020

    目录 问题描述 思路分析及代码 问题描述 小蓝有一个数字矩阵 里面只包含数字 0 和 2 小蓝很喜欢 2020 他想找到这个数字矩阵中有多少个 2020 小蓝只关注三种构成 2020 的方式 同一行里面连续四个字符从左到右构成 2020 同
  • 89个android学习样例源码

    源码下载链接 https pan baidu com s 1uT hsZQac7Hz3pOxX466Cw pwd 8888 提取码 8888 Android 仿京东金融首页头像效果 Android 实现Conquer应用源码 Android
  • 解决解密时出现"要解密的数据的长度无效" 或 "填充无效无法被移除" 的错误

    1 首先排除数据库中读取加密后的字段是否被强制截断 2 AES加密后的byte 首先应用base64 Convert ToBase64String 编码一次 若直接用utf8的话会报上述错误 若用unicode编码的话会解密成乱码 原因是加
  • java对象的内存模型详解:内存模型及对象头的奥秘

    在面试官的因势利导下 很多人对jvm的内存模型已经耳熟能详 但是对我们经常new 出来的对象 比如new Object 你了解它的内存模型吗 本篇文章将带你走进对象内部 真正去了解这个你最熟悉 也最不熟悉的的对象 一 对象的内存模型 先上图
  • (yolov5.train)-YOLOv3源码解析4-计算损失compute_loss()

    图像算法 yolov5 train YOLOv3源码解析4 计算损失compute loss 简书
  • linux安装anaconda及配置pytorch环境

    文章目录 下载anaconda 使用conda创建新环境 判断是否安装成功 判断pytorch是否安装成功 检验是否可以使用GPU 下载anaconda 这里有多种方法 可以下载到windows然后通过xftp传到linux服务器上 也可以
  • 狂刷200道数据结构与算法,我的华为面试经历分享

    基本概念面试题集 Spring 相关概念梳理 谈谈对Spring loC的理解 谈谈对Spring Dl的理解 BeanFactory 接口和ApplicationContext接口不同点是什么 请介绍你熟悉的Spring 核心类 并说明有
  • 累加器的作用

    累加器和算术逻辑单元 运算场所 指令寄存器 指令译码 定时及各种控制 信号产生电路 1 在运算器中 累加器是专门存放算术或逻辑运算的一个操作数和运算结果的寄存器 能进行加 减 读出 移位 循环移位和求补等操作 是运算器的主要部分 2 在中央
  • 大数据时代的 9 大Key-Value存储数据库

    在过去的十年中 计算世界已经改变 现在不仅在大公司 甚至一些小公司也积累了TB量级的数据 各种规模的组织开始有了处理大数据的需求 而目前关系型数据库在可缩放方面几乎已经达到极限 一个解决方案是使用键值 Key Value 存储数据库 这是一
  • JSR303和拦截器

    目录 一 JSR303 1 pom依赖 二 拦截器 1 什么是拦截器 2 拦截器与过滤器 3 应用场景 4 拦截器的快速入门 三 拦截器链 1 拦截器链的概念 2 TwoHandlerInterceptor java 3 在springmv
  • 912.排序数组

    目录 一 题目 二 代码 一 题目 912 排序数组 力扣 LeetCode 二 代码 class Solution public void MergeSort vector
  • C# 异常:已引发: "线程间操作无效: 从不是创建控件“textBox1”的线程访问它。" (System.InvalidOperationException)

    当使用多线程功能时 在子线程里修改UI控件参数时 如 textBox1 Text str 会引发异常 异常 已引发 线程间操作无效 从不是创建控件 textBox1 的线程访问它 System InvalidOperationExcepti