当前位置: 首页 > news >正文

C#中关于InvokeRequired 属性 与Invoke方法

原文链接:https://blog.csdn.net/Pei_hua100/article/details/107353455

C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它。

Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性 。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。

该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。 首先定义一个委托,与这个事件处理函数的签名一样委托,当然直接使用该事件的委托也是可以的,如:

private   delegate   void  InvokeCallback( string  msg);

然后就是判断这个属性的值来决定是否要调用Invoke函数:

void  m_comm_MessageEvent( string  msg)    

 {      if (txtMessage.InvokeRequired)    

   {  

     InvokeCallbackmsgCallback  =   new  InvokeCallback(m_comm_MessageEvent);     

      txtMessage.Invoke(msgCallback,  new   object []  { msg } );    

 }    

   else   

    {   

   txtMessage.Text  =  msg;  

   } 

  }

以下是个人的另一种实现方法:

调用机制代码:

public static class FormUtils{public static void InvokeDele(this Control sender, Action<DeleArgs> action, DeleArgs args){if (sender.InvokeRequired){sender.Invoke(action, args);}elseaction(args);}}//参数类public class DeleArgs : EventArgs{public DeleArgs(object[] args){Args = args;}public object[] Args { get; set; }}

  窗体中的调用示例:

Action<DeleArgs> action = new Action<DeleArgs>(args =>{object parm1 = (object)args.Args[0];string parm2 = (string)args.Args[1];...});DeleArgs arg = new DeleArgs(new object[] { parmVal1, parmVal2 });FormUtils.InvokeDele(this, action, arg);

  

 

http://www.zskr.cn/news/18833.html

相关文章:

  • MZOI 20251011【CSP-】模拟 T2 序列区间
  • 完整教程:后端进阶-性能优化
  • Java的各类定时任务实现
  • 03:运算符
  • python静态类型之any
  • 2025 年最新金蝶云服务商推荐榜单:聚焦铂金伙伴技术实力与万级客户口碑,助力企业数字化转型精准选型上海金蝶云服务商推荐
  • 使用 C++ 和 minizip 实现 ZIP 压缩解压工具
  • 西部数码使用外部dns服务器怎么配置解析
  • 一看就懂,Oracle认证体系中的OCP中级认证
  • 2025 年试验机生产厂家最新推荐榜单:聚焦优质企业,助力精准选购高低温等各类试验设备弹簧拉压/弹簧疲劳/高频弹簧疲劳/U型弹簧专用试验机厂家推荐
  • IIS/如何查看IIS上部署网站的实时连接数
  • 拼叨叨砍价系统:实体店低成本引流的营销利器
  • SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
  • 超高密度2kW GaN基低压电机驱动器的设计 - 实践
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI代理框架需求洞察
  • 02:基础数据类型
  • 接口测试全流程实战:从工具到架构的深度解析
  • C# Send and receive big file via stream
  • 2、python get请求
  • 可解释AI技术解析与模型监控实践
  • 开源多场景问答社区论坛Apache Answer本地部署并发布至公网使用 - 实践
  • 2025异型钢厂家最新推荐榜:定制化生产与卓越品质引领者
  • 2025热喷铝厂家最新推荐榜:品质卓越与专业服务的行业首选!
  • 2025方钢厂家,异型钢厂家,六角钢厂家最新推荐榜:品质与性价比兼备的首选品牌!
  • QuickLook软件!一款鼠标单击PDF即能显示内容的软件!
  • iOS 26 崩溃日志深度指南,如何收集、符号化、定位与监控 - 实践
  • 2020CSP-J2比赛记录题解
  • 让博客园设置支持PlantUml画图
  • 光谱相机的未来趋势 - 详解
  • Hall定理学习笔记