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

news/2025/10/11 15:08:09/文章来源:https://www.cnblogs.com/Dongmy/p/19135079

原文链接: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.mzph.cn/news/934825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云存储成本自动优化技术解析

本文介绍了一家初创公司开发的自主云存储优化引擎技术,该技术能实时自动调整存储容量,无需代码更改即可降低云存储成本,并兼容主流云存储环境,为AI等数据密集型行业提供高效存储解决方案。云存储优化初创公司获200…

MZOI 20251011【CSP-】模拟 T2 序列区间

好题集第四篇。题意 给一个长度为 $n$ 的正整数序列 $a$ 和一个常数 $k$,求 $a$ 中有多少对 $(l,r)$ 满足 $\frac{\prod_{i=l}^{r}}{\sum_{i=l}^{r}}=k$。 这里用 \(mina\) 表示数组中的最小值,用 \(maxa\) 表示数组…

完整教程:后端进阶-性能优化

完整教程:后端进阶-性能优化2025-10-11 15:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

SAP 中CONCATENATE 空格的时候,空格不生效

CONCATENATE lv_matnr lv_maktx INTO lv_text.会发现lv_text变量中没有空格,是因为lv_text是char类型,将lv_text改成string类型就没有这种问题了。

如何在 Vue 中打印页面:直接用 web-print-pdf(npm 包) - 详解

如何在 Vue 中打印页面:直接用 web-print-pdf(npm 包) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

Java的各类定时任务实现

在 Java 中实现定时任务有多种方式,下面详细介绍各种方法的使用: 1. Timer 和 TimerTask(基础版) import java.util.Timer; import java.util.TimerTask;public class TimerExample {public static void main(Stri…

03:运算符

> 一篇搞定C语言所有运算符:算术、关系、逻辑、位、赋值、三目、sizeof、优先级表全收录,附短路代码实验,写表达式不再懵!一、算术运算符(整型&浮点通用)运算符 功能 示例 备注+ 加/单目正 a + b、+a 单目…

JavaScript内存泄露原因及解决方案

在 JavaScript 中,内存泄漏通常发生在不需要的内存没有被垃圾回收器释放时。以下是常见的几种情况: 1. 意外的全局变量 // 意外的全局变量 function foo() {bar = "这是一个全局变量"; // 没有使用 var/le…

数据类型扩展

整数扩展 整数按进制可以分为二进制0b(binary)开头,八进制0开头,十进制和十六进制0x开头; 因此,二进制的10输出为2,因为逢2进1,同样地,0x10代表16,因为在十六进制中,逢十六进1;同时,在十六进制中,10-15表…

python静态类型之any

python静态类型之any 漫思

2025 年最新金蝶云服务商推荐榜单:聚焦铂金伙伴技术实力与万级客户口碑,助力企业数字化转型精准选型上海金蝶云服务商推荐

当前数字经济浪潮下,企业数字化转型进程不断加快,ERP 系统作为转型核心支撑,其服务商的选择直接决定转型成效。但金蝶云服务商市场资质杂乱、服务能力悬殊,众多企业在选型时屡屡碰壁,不仅难以辨别服务商真实水平,…

OIFHA251011 比赛总结

比赛:OIFHA251011 日期:\(25.10.11\),场地:\(\text{OIFHA}\),排名:\(6/16\) 估分:\(100+100+0+20=220\) 终分:\(100+100+10+20=220\) 应该得分:\(100+100+10+40=250\) 失分 没想到 \(T_4\) 可以直接离线下来慢…

P2051 [AHOI2009] 中国象棋 个人题解

题目链接 题目描述: 给你一个 \(n*m\) 的棋盘,棋盘的每行和每列只能放置有 \(2\) 个棋子(可以放置 \(0\) 个棋子),问有多少种放置方案 解题方法: 这道题看起来像是八皇后问题的加强版,但是如果一个个枚举的话,…

一种智能调度分布式路径计算解决方案

本文分享自天翼云开发者社区《一种智能调度分布式路径计算解决方案》.作者:蒋辉 背景技术 传统的CDN动态加载智能路由系统对用户动态请求,主要通过探测服务器主动发起周期性的探测请求,探测CDN中转节点和源站的可用…

使用 C++ 和 minizip 实现 ZIP 压缩解压工具

在软件开发中,文件压缩和解压是常见的需求。今天我们来介绍一个基于 minizip 库的 C++ ZIP 工具类 - ZipUtility,它可以轻松地处理 ZIP 文件的创建和解压。这篇文章使用AI辅助编写。核心功能 1. 压缩功能 ZipUtility…

西部数码使用外部dns服务器怎么配置解析

西部数码使用外部dns服务器怎么配置解析在西部数码购买的域名如果使用的dns是外部的,要在该外部dns管理平台去设置解析 比如使用的阿里云的dns如何设置解析 在阿里云dns管理页面找到dns粘贴到西部数码该域名的解析地址…

一看就懂,Oracle认证体系中的OCP中级认证

对于刚接触Oracle数据库或者打算往数据库领域发展的人来说,需要了解一下这个认证:Oracle的中级认证OCP认证专家。 OCP认证全称为Oracle Certified Professional(甲骨文认证专家),是全球知名的IT技术认证体系之一,由…

实用指南:SDN 控制器深度剖析:架构、对比与实践部署

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年试验机生产厂家最新推荐榜单:聚焦优质企业,助力精准选购高低温等各类试验设备弹簧拉压/弹簧疲劳/高频弹簧疲劳/U型弹簧专用试验机厂家推荐

在工业生产与科研检测的关键环节,试验机对保障产品质量、验证材料性能起着不可替代的作用。随着市场需求激增,试验机生产厂家数量骤增,但行业乱象也随之显现,产品质量参差不齐、技术水平差距悬殊、服务体系不完善等…

IIS/如何查看IIS上部署网站的实时连接数

我们在IIS发布的Web网站,如何查看网站实时的连接数呢? 1、首先打开运行框,输入perfmon.msc 2、打开监视工具-->性能监视器 3、点击 “+”号,添加计数项 Web Service/Current Connections 4、可以查看到网站的实…