LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#通过Thread实现跨线程访问控件

admin
2025年4月1日 22:28 本文热度 100

通过Thread使用委托的方式实现按下按钮后,结果1和结果2中显示计算的结果值。

此案例中,在Thread里面不能对控件直接操作,因为使用Thread后相当于新建了一个线程,不能直接去访问主线程里面的控件。否则会出现下图中的错误。此时需要通过委托的方式实现跨线程操作。


使用InvokeRequired属性判断要操作的控件线程是否与Thread声明的线程是同一个线程,如果不是同一个线程则使用Invoke方法对其进行操作,Invoke中使用委托的方式,Action:代表无返回值的方法,Func:代表有返回的方法。

Invoke:

1)用于在创建控件的线程上执行方法,以确保线程安全地访问 UI 控件。

2)用于调用委托(方法)的方式来确保方法在控件所属的线程上执行。

3)当你在非 UI 线程(如后台线程)试图更新 UI 控件时,会抛出 InvalidOperationException,使用 Invoke 可以避免这种错误。

control.Invoke(delegate, parameters);  

control:要被调用的控件。

delegate:要在控件所属线程上执行的委托方法。

parameters:传递给该方法的参数(可选),即当delegate是有参数的方法时,需要为其传递的参数。


如下:按下按钮后,通过Thread创建线程,在线程中调用Invoke方法,通过Action委托(有参和无参)实现更新主界面UI。

namespace _013_Thread跨线程访问控件{    public partial class Thread跨线程访问控件 : Form    {        public Thread跨线程访问控件()        {            InitializeComponent();        }        string str = "456789";        private void btTask_Click(object sender, EventArgs e)        {            //ThreadStart委托定义:public delegate void ThreadStart()            Thread thread1 = new Thread(() =>            {                //True则表示与当前线程不在同一个线程中                if (this.lbl1.InvokeRequired==true)                {                    //使用Invoke方法进行传递数据,Action无参数,无返回值                    //有返回值的要使用Func                    this.lbl1.Invoke(new Action(() =>                    {                        lbl1.Text = "123456";                    }));                }                if (this.lbl2.InvokeRequired == true)                {                    //使用Invoke方法进行传递数据,Action有参数,无返回值                    this.lbl2.Invoke(new Action<string>((st) =>                    {                        lbl2.Text = st;                    }),str);//将要传递的参数写到Lambda表达式后面,即将str的值传递给(st)                }            });            thread1.IsBackground = true;//设置为后台线程            thread1.Start();//启动线程        }    }}

阅读原文:原文链接


该文章在 2025/4/2 14:28:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved