C# 委托
Action
在 C# 中,Action 是一个预定义的委托类型,表示一个不带参数和返回值的方法。它的定义如下:
public delegate void Action();
Action 委托可以用于表示任何没有参数和返回值的方法。例如:
// 定义一个不带参数和返回值的方法
public void SayHello()
{Console.WriteLine("Hello!");
}// 使用 Action 委托表示 SayHello 方法
Action action = SayHello;// 调用委托来执行方法
action(); // 输出:Hello!
如果要表示带有参数的方法,可以使用 Action 委托,其中 T 是方法参数的类型。例如,要表示一个带有一个整数参数的方法,可以使用 Action 委托:
// 定义一个带有一个整数参数的方法
public void PrintNumber(int number)
{Console.WriteLine("The number is " + number);
}// 使用 Action<int> 委托表示 PrintNumber 方法
Action<int> action = PrintNumber;// 调用委托来执行方法
action(42); // 输出:The number is 42
Action 委托还有一些重载形式,可以用于表示带有多个参数的方法,例如 Action<T1, T2> 表示带有两个参数的方法,Action<T1, T2, T3> 表示带有三个参数的方法,以此类推。
Invoke
在 C# 中,Invoke 是一个非常有用的方法,它用于在 Windows 窗体应用程序中调用控件的方法或属性。Invoke 方法的作用是在正确的线程上执行特定的代码,以确保不会出现线程安全问题。这是因为在 Windows 窗体应用程序中,UI 控件只能在创建它们的线程上访问。
当在不同的线程中调用控件的方法或属性时,就会出现跨线程访问异常。为了避免这种异常,我们可以使用 Invoke 方法,该方法将代码包装在委托中,并将其发送到创建控件的线程。在创建控件的线程中,Invoke 方法会在正确的线程上执行该委托,以便访问控件的方法或属性。
以下是一个示例,演示了如何在 C# 中使用 Invoke 方法来访问控件的属性:
private void UpdateTextBox(string text)
{if (textBox1.InvokeRequired){textBox1.Invoke(new Action<string>(UpdateTextBox), new object[] { text });}else{textBox1.Text = text;}
}
在上面的示例中,我们首先检查当前线程是否与创建 textBox1 控件的线程相同。如果不是,我们使用 Invoke 方法将 UpdateTextBox 方法的调用包装在一个 Action 委托中,并将其发送到 textBox1 控件所在的线程。在该线程中,Invoke 方法会在正确的线程上执行 UpdateTextBox 方法的调用,以便访问 textBox1 的 Text 属性。如果当前线程与创建 textBox1 控件的线程相同,则直接访问 textBox1 的 Text 属性。
InvokeRequired
在这段代码中,“InvokeRequired” 是一个属性,它用于检查当前线程是否可以访问 UI 控件 “textBox1”。如果当前线程不是创建该控件的线程,则该属性返回 true,这意味着不能直接访问该控件,因为只有创建控件的线程才有权访问它。
在这种情况下,为了更新文本框的内容,必须使用 “Invoke” 方法来在 UI 线程上执行更新操作。 “Invoke” 方法接受一个委托对象作为参数,该委托对象指定了需要在 UI 线程上执行的操作。在这里,我们将 UpdateTextBox 方法作为委托传递给 Invoke 方法,并传递要更新的文本作为参数。
因此,“InvokeRequired” 属性的作用是检查当前线程是否可以访问 UI 控件,以便在必要时使用 “Invoke” 方法来更新控件。
相关文章:
C# 委托
Action 在 C# 中,Action 是一个预定义的委托类型,表示一个不带参数和返回值的方法。它的定义如下: public delegate void Action();Action 委托可以用于表示任何没有参数和返回值的方法。例如: // 定义一个不带参数和返回值的方…...
leetcode究极刷题笔记(11~15)
(11)盛最多水的容器(中等) 实现思路: 定义两个指针(a,b),分别指向数组的前后位置,如果此时a的值小于b的话,就将a右移一位,如果此时b指向的值小于…...
【C语言】一篇带你从零了解 枚举
文章目录什么是枚举枚举类型的定义枚举的优点枚举的使用什么是枚举 枚举是 C 语言中的一种基本数据类型 可以让数据更简洁,更易读。 枚举顾名思义就是 一 一 列举。 把可能的取值 一 一列举。 比如我们现实生活中: 一周的星期一到星期日是有限的7天&…...
用Pytorch搭建一个房价预测模型
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、项目介绍 二、准备工作 三、实验过程 3.1数据预处理 3.2拆分数据集 3.3构建PyTorch模型 3.3.1.数据转换 3.3.2定义模型架构 3.3.3定义损失准则和优化器 3.3.4创建…...
《Netty》从零开始学netty源码(十五)之ServerSocketChannel
在NioServerSocketChannel中调用newChannel方法创建java原生的channel,过程如下: ServerSocketChannel是一个抽象类,WEPollSelectorProvider调用openServerSocketChannel方法创建的是它的实现类ServerSocketChannelImpl,类结构如下…...
Java stream性能比较
环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17CPU:8核 ➜ ~ cat /proc/cpuinfo | egrep -ie physical id|cpu cores physical id : 0 cpu cores : 1 physical id : 2 cpu cores : 1 physical id : 4 cpu cores : 1 physical id : 6 cpu cores : 1 physical id …...
【数据结构与算法】设计循环队列
文章目录👑前言如何设计循环队列设计循环队列整体的代码📯写在最后👑前言 🚩前面我们 用队列实现了一个栈 ,用栈实现了一个队列 ,相信大家随随便便轻松拿捏,而本章将带大家上点难度,…...
最新版!国内IT软件外包公司汇总~
金三银四已经过去一半,再过几个月又将迎来毕业季,大家有没有找到心仪的工作机会呀?有很多同学说今年的金三银四似乎不存在了。小李:今年的金三银四变成了铜三铁四,不断地投递又不断地造拒。小王:大量已读不…...
MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT 但是,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。不信的话请尝试回答下…...
数位DP 详解及其案例实战 [模板+技巧+案例]
零. 案例引入 1.案例引入 leetcode233. 数字 1 的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。 输入:n 13 输出:6 2.暴力解 对于上述的案例,暴力解肯定是可行的,但时间复杂度较高,对…...
并发编程(六)—AbstractExecutorService源码分析
一、AbstractExecutorService简介AbstractExecutorService是一个抽象类,实现了ExecutorService接口,提供了线程池的基本实现。它是Java Executor框架的核心类,提供了线程池的基本操作,如提交任务、管理线程池、执行任务等。自定义…...
015行为型-职责链模式
目录定义标准模式实现:职责链变体使用链表实现使用数组实现应用场景日志输出spring过滤器spirng 拦截器mybatis动态sql定义 责链模式是一种设计模式,其目的是使多个对象能够处理同一请求,但是并不知道下一个处理请求的对象是谁。它能够解耦请…...
python例程:五子棋(控制台版)程序
目录《五子棋(控制台版)》程序使用说明程序示例代码可执行程序及源码下载路径《五子棋(控制台版)》程序使用说明 在PyCharm中运行《五子棋(控制台版)》即可进入如图1所示的系统主界面。 图1 游戏主界面 具…...
leveldb的Compaction线程
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 1. leveldb的Compaction全局线程 在leveldb中,有一个全局的后台线程BGThread,用于数据库的MinorCompact与MajorCompact。 重点关注“全局线程”: 这个标识着无论一个进程打开…...
邪恶的想法冒出,立马启动python实现美女通通下
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 完整源码、python资料: 点击此处跳转文末名片获取 当我在首页刷到这些的时候~ 我的心里逐渐浮现一个邪念:我把这些小姐姐全都采集,可以嘛? 答案当然是可以的~毕竟就我这技术,…...
蓝桥杯刷题冲刺 | 倒计时18天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录0.知识点1.乳草的入侵今天写 搜索题 0.知识点 DFS 设计步骤 确定该题目的状态(包括边…...
经典算法面试题——Java篇-附带赠书活动,评论区随机选取一人赠书
目录 一.图书推荐 二.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 三.什么是插入排序?用代码如何实现? 四.什么是冒泡排序?用代码如何实现? 五.什么是斐波那契数列&#…...
支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了
支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了 熟悉RT-Thread和瑞萨MCU的朋友都知道,当前RT-Thread仓库的主线代码是不支持RA2E1这个BSP的。刚好,最近我在联合瑞萨推广一个叫《致敬未来的攻城狮计划》,使用的就是RA2E1开发板&…...
【C语言进阶】 12. 假期测评①
day01 1. 转义字符的判断 以下不正确的定义语句是( ) A: double x[5] {2.0, 4.0, 6.0, 8.0, 10.0}; B: char c2[] {‘\x10’, ‘\xa’, ‘\8’}; C: char c1[] {‘1’,‘2’,‘3’,‘4’,‘5’}; D: int y[53]{0, 1, 3, 5, 7, 9}; 【答案解析】 B 本…...
给程序加个进度条吧,1行Python代码,快速添加~
大家好,这里是程序员晚枫。 你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆…...
Ender-3固件配置终极指南:从新手到高手的完整教程
Ender-3固件配置终极指南:从新手到高手的完整教程 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3 3D打印机是一款广受…...
NotebookLM时间线功能深度解锁:5个被90%用户忽略的高阶技巧,今天必须掌握
更多请点击: https://codechina.net 第一章:NotebookLM时间线功能概览与核心价值 NotebookLM 的时间线(Timeline)功能是其区别于传统笔记工具的关键创新,它以可视化、可交互的方式呈现文档内容的演进脉络与语义关联。…...
基准测试结果刚出炉,DeepSeek在医疗/法律/金融三大垂直领域事实准确率对比,谁在说真话?
更多请点击: https://intelliparadigm.com 第一章:基准测试结果刚出炉,DeepSeek在医疗/法律/金融三大垂直领域事实准确率对比,谁在说真话? 我们基于权威垂直领域评测集——MedMCQA(医疗)、Case…...
保姆级教程:在Ubuntu 22.04 LTS上从零部署Zabbix 6.0监控系统(含MariaDB配置)
从零构建企业级监控系统:Ubuntu 22.04下Zabbix 6.0与MariaDB深度整合指南 第一次接触服务器监控系统时,我被各种专业术语和复杂的配置步骤弄得晕头转向。直到遇到Zabbix,这个开箱即用的监控解决方案彻底改变了我的运维工作方式。本文将带你完…...
解决VMware安装macOS后分辨率锁死的烦恼:手把手教你安装VMware Tools并自定义显示设置
突破VMware中macOS显示限制:从工具安装到完美适配的全流程指南 当你在VMware中成功安装macOS系统后,可能会立刻遇到一个令人沮丧的问题——屏幕分辨率被锁定在低分辨率状态,窗口无法自由缩放,操作体验大打折扣。这种显示限制不仅…...
CANN Profiling 与性能分析:定位训练与推理瓶颈
一、为什么需要 Profiling 1.1 性能问题的来源 深度学习训练和推理的性能瓶颈可能来自多个环节:数据准备慢导致 GPU 空闲、模型算子计算慢成为瓶颈、内存拷贝频繁拖累整体、通信带宽受限拖慢分布式训练。不同瓶颈的优化方法完全不同,错误的优化方向不仅浪…...
需求用例-成功保证
成功保证(success guarantee)说明了用例成功结束后项目相关人员的哪些利益得到了满足,用例可以通过执行主场景获得成功,也可以通过执行可选路径获得成功。成功保证通常是作为最小保证的补充内容:最小保证被满足以后, 第6章 前置条件、触发事件…...
提示词失效?双色调渲染偏色?深度解析Midjourney色彩空间转换机制,精准锁定sRGB→Lab双色域锚点
更多请点击: https://codechina.net 第一章:提示词失效?双色调渲染偏色?深度解析Midjourney色彩空间转换机制,精准锁定sRGB→Lab双色域锚点 当用户在Midjourney中输入高饱和度提示词(如“vibrant cyan neo…...
Real-ESRGAN图像增强:3步掌握AI超分辨率魔法
Real-ESRGAN图像增强:3步掌握AI超分辨率魔法 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN 你是否曾为模糊的老照片、…...
LeetCode--112. 路径总和(二叉树)
题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没…...
