C# WinForm 跨线程访问控件

这篇具有很好参考价值的文章主要介绍了C# WinForm 跨线程访问控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

在WinForm开发中,经常会碰到主线程代码运行过程中需要刷新窗体控件的情况,如果直接在其他线程中去操作窗体控件,这时会抛出线程间操作无效的异常信息,因为窗体控件是由主线程创建的,C#强制要求代码必须是线程安全的,所以不允许跨线程访问。需要使用控件的Invoke方法,通过拥有控件的基础窗口句柄的线程来执行。

异常信息如下:

C# WinForm 跨线程访问控件,C#,c#,开发语言

改成如下代码就可以了 

代码实现

    Action<int> setText = (i) => { this.lblMessage.Text = $"第 {i} 次执行";  };
    var task = Task.Factory.StartNew(() => {

        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(1000);
            lblMessage.Invoke(setText, i);
            //lblMessage.Text = $"第 {i} 次执行";
        }                
    });

执行结果:

C# WinForm 跨线程访问控件,C#,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-758211.html

到了这里,关于C# WinForm 跨线程访问控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Visual Studio C# WinForm开发入门(5):TabControl 控件使用

    TabContrl选项卡控件可创建标签化窗口,在实际 编程中经常用到,该控件的作用是将相关的组件组合到一系列选项卡页面上。 比如下面的例子,在tabPage1页面和tabPage2页面各放了2个checkBox控件,通过点击不同page即可切换: 1、添加和删除TabControl控件中的选项卡 有两种方法: 第

    2024年02月07日
    浏览(35)
  • Visual Studio C# WinForm开发入门(6):TreeView 控件使用

    TreeView控件用树显示节点层次。 例如:顶级目录是根(C:),C盘下的每个子目录都是子节点,而每个子目录又都有自己的子节点 TreeView属性和方法: 属性 说明 CheckBoxes 表示节点旁边是否出现复选框 ImageList 指定一个包含节点图标的ImageList对象。ImageList对象是一个包含Image对象的

    2024年02月02日
    浏览(34)
  • C#中错误:线程间操作无效,从不是创建控件的线程访问它。

    一、原因分析 跨线程调用控件会出现这个错误的原因是因为:.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 所以不是在创建控件所在的线程内调用就会发生这样的错误。 二、解决办法 方法1:设置CheckForIllegalCrossThreadCalls =false 是能去掉这个检查的

    2024年02月15日
    浏览(24)
  • C#线程间操作无效:从不是创建控件“textbox1”的线程访问它

    在C#的多线程访问中,在线程间的相互访问时因为线程安全问题有访问限制,在创建一般线程时,对于界面元素访问时这样的问题比较常见。 比如,创建一个form1,上面放置一个textbox控件,创建一个线程去访问textbox,界面如下: 按钮buuton1的代码: 就是简单地创建一个线程,

    2023年04月09日
    浏览(30)
  • C# 解决 System.InvalidOperationException:“线程间操作无效: 从不是创建控件“...”的线程访问它。”

    方法1(不推荐):禁用跨线程检查 使用 Control.CheckForIllegalCrossThreadCalls = false; 例如: 方法2:使用委托 使用 Control 基类的 Invoke 或 BeginInvoke 方法,来执行禁止跨线程的代码。 例如: 或: 使用参数进行传递: 不使用 lambda 表达式的写法: 使用 BeginInvoke 方法的情形,与使用

    2024年02月12日
    浏览(30)
  • C#针对VS线程间操作提示:程间操作无效: 从不是创建控件“”的线程访问它的几种解决方法

    转载请标明出处:Python Excellent的博客 此为最基础方法 (入门级) 运行效果如图所示 * 先在按钮事件中创建一个Test1()线程 * 在测试1中有两种方法可以访问窗体线程(首推荐) public SynchronizationContext UiContext //第一步全局声明 UiContext = SynchronizationContext.Current; //第二部在public For

    2024年02月08日
    浏览(33)
  • 使用DevExpress22.X(Patch)控件库在VisualStudio2022使用C#进行Winform、WPF应用的开发,看这一篇就够了!

            写在开头,Dev Express是个十分强大的控件库(下文简称Dev),但碍于其高昂的使用费用,“出于学习目的”,我们一般使用的都是Patch版本(在版权意识日趋加强的当下,不要提那两个字,现在加上那些字,百度都搜不出内容)。         最重要的 Patch资源 (包括

    2024年02月09日
    浏览(45)
  • C# WinForm —— 05 控件简介

    简介 窗体中用于输入或操作的对象,有自己的属性、方法、事件 特征 可视化,与用户进行交互,属性,方法,事件,可供开发人员使用,可发布和重用 控件开发 复合控件:各种控件组合起来,形成一个新的控件 扩展控件:现有控件上派生出一个新的控件,为原有框架增加

    2024年04月12日
    浏览(23)
  • C# WinForm —— 06 常用控件

    公共控件 功能 Label 标签,UI上的提示性文字 TextBox 文本框 RadioButton 单选按钮 CheckBox 复选框 ComboBox 下拉框,只能选择一个选项 CheckedListBox 带复选框的列表项,可以选择多个选项的下拉菜单 DateTimePicker 日期时间选择控件 ListBox 列表框 ListView 以五种不同视图显示项的集合 Mask

    2024年04月10日
    浏览(35)
  • C# Winform Label 控件

    目录 一、概述 二、基本用法 1.控件内容显示 2.控件的外观 3.自定义控件的大小 4.控件的内边距  5.设置文本的固定位置 6.控件的事件 结束 Label 控件是 winform 开发中最常用的一个控件,一般用做显示文本,也有时用做打开链接等操作。 新建一个 winform 项目,点击 form1 界面,

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包