C# 采用系统委托的方式处理线程内操作窗体控件

C#中跨线程访问控件处理方式      C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件A(由线程Tread A创建)的InvokeRequired属性值为真时,说明有一个创建它以外的线程(Tread B)想访问它。此时,若Tread B线程直接访问控件A,则系统会报异常,需在Tread B线程内部调用new 控件A.MethodInvoker(LoadGlobalImage)类... 阅读详情

一、System.Windows.Forms.MethodInvoker 类型是一个系统定义的委托,用于调用不带参数的方法。
private Thread myThread;

private void Form1_Load(object sender, EventArgs e)

{

myThread = new Thread(new ThreadStart(RunsOnWorkerThread));

myThread.Start();

}

private void RunsOnWorkerThread()

{

MethodInvoker mi = new MethodInvoker(SetControlsProp);

BeginInvoke(mi);

}

private void SetControlsProp()

{

label1.Text = "myThread线程调用UI控件";

}


二、直接用System.EventHandle(可带参数)

private Thread myThread;

private void Form1_Load(object sender, EventArgs e)

{

myThread = new Thread(new ThreadStart(RunsOnWorkerThread));

myThread.Start();

}

private void RunsOnWorkerThread()

{

//DoSomethingSlow();

string pList = "myThread线程调用UI控件";

label1.BeginInvoke(new System.EventHandler(UpdateUI), pList);

}

//直接用System.EventHandler,没有必要自定义委托

private void UpdateUI(object o, System.EventArgs e)

{

//UI线程设置label1属性

label1.Text = o.ToString() + "成功!";

}
三、演示程序

/// <summary>
/// 提供给系统委托事件调用,解决线程内操作界面控件的目的
/// </summary>
/// <param name="obj"></param>
/// <param name="e"></param>
private void UpdateListBox(object obj,System.EventArgs e)
{
//强制类型转换
List<String> paramList = (List<string>)obj;
if (paramList[0] == "0")
{
this.lstBoxCatchData.Items.Clear();
}
else if (paramList[0] == "1")
{
this.lstBoxCatchData.Items.Add(paramList[1].ToString());
}
}

线程中调用部分:

//初始化参数列表
List<String> paramList = new List<string>();
paramList.Add("0");
paramList.Add("");

//这里采用系统委托的方式,实现线程内操作系统界面控件。
paramList[0] = "0"; paramList[1] = "清除屏幕信息";
lstBoxCatchData.BeginInvoke(new System.EventHandler(UpdateListBox), paramList);

结束。
 

c#中跨窗体调用控件 跨窗体相当于跨线程了,并不能直接调用 可以利用委托来实现 现在有两个窗体,form1和form2,form1中有一个textbox,form2中有一个button,要实现的功能是按下按钮改变textbox里的text 实现方法: 1.首先声明一个全局委托, public delegate void SetText(); 2.在form2中实例化该委托:public SetText set 阅读详情

相关推荐

C#委托的前世今生

我们所以常写的那行代码,其实只是一种简写方式而已,委托的五步法,不管怎么简化,怎么优化,其实本质还是一样,都离开不了这五个步骤。这就是经典。

曾经的我也很优秀,现在的我一无所有。 1535

C#利用委托实现命令按钮跨窗体控制

最近总有一些奇妙的想法,这是其中之一,可不可以用一个窗体的button操作其他窗体的button呢?下面是我的实现方法: Form1代码: public delegate void SetText(); public partial class Form1 : Form { Form2 f2 = new Form2(); public Form1() { InitializeComponent();

qq_44685392的博客 756

WinForm(C#)中跨线程访问控件的解决方法

WinForm(C#)中跨线程访问控件的解决方法 由于多线程可能导致对控件访问的不一致,导致出现问题。C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出异常。 解决办法有两个: 1、不进行线程安全的检查 2、通过委托的方式,在控件的线程上执行

C#跨线程调用窗体控件

一、System.Windows.Forms.MethodInvoker 类型是一个系统定义的委托,用于调用不带参数的方法。         private Thread myThread;         private void Form1_Load(object sender, EventArgs e)         {             myThread = n

yal179的专栏 848

C#线程委托中对控件的调用

可以在线程中对控件的调用,将控件的相应操作只需要调用委托方法就可以了

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

Winform(C#)如何在线程和类中使用窗体控件

Winform(C#)如何在线程中使用窗体控件——委托 想必大家在使用C#布置自己的Winform时,经常会遇到在线程中无法调用窗体控件的问题。这种问题其实是一种保护…,算了,说了也没用,还不如来重点。就是当你在线程无法调用的时候,你就用委托。 首先你要定义一个自己的委托: public delegate void MyDelegate(); 然后,定义一个委托函数 private void show_Result() { my_Textbox.Text=""; } 完成以后,就可以在线程中操作

weixin_44384954的博客 5325

从‘数字分身’到‘数字员工’:华为云MetaStudio如何重塑企业生产力?

本文探讨了华为云MetaStudio如何通过数字人技术重塑企业生产力,从数字分身到数字员工的转变。通过多模态AIGC技术,MetaStudio在金融、零售和制造业等多个行业实现高效应用,显著提升服务质量和运营效率。数字员工不仅降低成本,更成为企业增长的新引擎。

weixin_29083475的博客 450

c#利用委托跨线程调用UI控件完整使用方法

在子线程中通过委托访问form并修改UI控件

tonggen7135的博客 1万+

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3185

希捷硬盘卡死修复实战:U盘启动盘制作与低格清零全流程

机械硬盘使用多年后常出现卡顿、假死、坏道等问题,很多用户在网上搜索“希捷硬盘低格工具”或“U盘硬盘复活器”,却发现要么工具不明,要么操作不当造成二次损伤。其实所谓修复工具,本质是U盘启动环境配合硬盘检测与清零软件,低格并非修复物理坏道,而是通过全盘写零触发主控重映射,隔离不稳定扇区。懂原理后,用官方SeaTools、Ventoy/U盘启动盘、Victoria或Linux dd等组合工具,即可对可抢救的硬盘做清零修复。这一技术适用于逻辑坏道、SMART警告、扇区不稳定等场景,但需先备份数据并判断盘体是否有异响

weixin_30431445的博客 216

PCA9422+STM32L152ZD低功耗电源系统设计实战

电源管理在嵌入式系统中远不止是选型LDO或DC-DC,其本质是多电压域协同、动态功耗调度与硬件级状态机联动的系统工程。理解电源路径控制(Power Path Management)和低功耗模式(如STOP2/Standby)的触发条件与依赖关系,是实现电池续航≥6个月的关键前提。技术价值在于通过PMIC与MCU深度耦合,将传统‘供电模块’升级为可编程‘能量操作系统’,支撑ADC高精度采样、RTC可靠唤醒、OTA安全升级等典型物联网应用场景。本文聚焦PCA9422与STM32L152ZD协同设计,覆盖电压域隔

weixin_34082695的博客 403

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

C# 采用系统委托的方式处理线程内操作窗体控件(转载)

C# 采用系统委托的方式处理线程内操作窗体控件 C# / asp.net / j 2009-12-25 10:04:47 阅读138 评论0 字号:大中小订阅 一、System.Windows.Forms.MethodInvoker 类型是一个系统定义的委托,用于调用不带参数的方法。private Thread myThread; private void Form1_Loa...

weixin_30354675的博客 85

Ansys口腔正畸有限元分析:从几何处理到接触设定的全流程解析

本文详细解析了Ansys在口腔正畸有限元分析中的全流程应用,从几何处理到接触设定,帮助医生精准预测牙齿移动趋势。通过有限元建模技术,可同时观察牙齿-牙周膜-牙槽骨的力学响应,显著提升矫治效果预测准确率。文章还分享了实用技巧和参数设置建议,适用于正畸医生和工程师。

weixin_30897233的博客 348

深度解析:C# Modbus TCP协议解析与异常处理(工控上位机必备)

协议解析要精准:掌握MBAP头和PDU的结构,尤其是常用功能码的请求/响应格式,避免因字节处理错误导致通信失败;异常处理要全面:覆盖通信层、协议层、数据层的所有异常类型,针对工业场景制定重试、重连、滤波等策略;资源管理要规范:使用释放资源,采用连接池复用连接,避免端口泄露;工业场景要适配:结合工控现场的特点(网络波动、电磁干扰、设备忙),优化通信效率和数据处理逻辑。通过以上解析和策略,可确保C#上位机与工业设备的Modbus TCP通信具备高稳定性、高可靠性、高容错性,满足工控领域的严苛要求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

C# 窗体 winform 委托实例

C# winform委托实例1.委托相关总结2.委托程序流程3.1具体实例: Form1打开Form2,Form2改变Form1颜色3.2 Form1打开Form2,Form2传递值给Form1 1.委托相关总结 好处:1.可以避免在程序中大量使用If-Else(Switch)语句, 通过委托示列来实现 2.同时使得程序具有更好的可扩展性 什么时候用?委托自定义事件,回调,匿名委托,线程访问主线...

火山上的企鹅 6315

基于C#的工业机器人上位机控制程序开发(搭配松下PLC+MC协议)

基于C#的工业机器人上位机控制程序开发,核心是上位机与松下PLC的MC协议通信和机器人控制的安全逻辑,而不是单纯的界面编写。在工控现场,程序的稳定性和安全性永远是第一位的——比如解耦通信逻辑、处理跨线程问题、添加安全互锁、记录操作日志,这些都是保证产线稳定运行的关键。新手在学习时,建议先跟着步骤搭建好环境,跑通基础的PLC通信和机器人控制功能,再逐步尝试进阶优化。数据模型化、通信封装化、逻辑模块化、UI解耦化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1239

c# winform 用委托方法实现子窗体修改父窗体控件的值

c# winform 用委托方法实现子窗体修改父窗体控件的值 主窗口:lable名:labelFather… 子窗口:lable名:labelChild From1.cs using System; using System.Windows.Forms; namespace WindowsFormsApplication2 { public delegate void Mydelegat...

weihldlfu的博客 2609

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c# 跨线程访问控件

https://www.cnblogs.com/lvdongjie/p/5428815.html

Sakuya__的博客 4100

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C#委托+回调详解

转载链接:https://www.cnblogs.com/yangfengwu/p/5761841.html 今天写不完,明天会接着写的,,,, 学习C#有一段时间了,不过C#的委托+回调才这两天才会用,以前只是知道怎么用.前面的一篇文章,函数指针,其实是为这个做铺垫的,说白了委托就相当于C语言中的函数指针,具体说用委托有什么好处,我也不知道,但是因为你只要学C#那么回调就一定要会,回调是委托...

cherishlicoolboy的博客 6906

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: string和byte[]的转换 (C#)
下一篇: 飞鸽协议分析
vrix
博客等级 码龄24年 673粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值