C#回调函数学习1
回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。
此定义来自网上;
看一个例子;这是用委托实现的回调函数;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace myhd1
{public partial class Form1 : Form{private delegate void MyDelegate(int a); //定义一个委托类型public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){myFuncWithCallback(15, new MyDelegate(MyCallBack));}private void myFuncWithCallback(int b, MyDelegate callback){int result = b * b;callback(result);}private void MyCallBack(int n){textBox1.Text = n.ToString();}}
}
private delegate void MyDelegate(int a);
定义一个委托,无返回值,有一个整型参数;
myFuncWithCallback是一个用户定义函数,一个带有回调函数的函数;
MyCallBack(int n)
{
.......
}
这是回调函数体;
new MyDelegate(MyCallBack),这是实例化委托;
单击按钮时调用了myFuncWithCallback,然后也会执行回调函数;
运行如下;

假设不用回调函数;代码是如下,
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
myFuncWithCallback(15);
}
private void myFuncWithCallback(int b)
{
int result = b * b;
MyCallBack(result);
}
private void MyCallBack(int n)
{
textBox1.Text = n.ToString();
}
}
功能也是一样;
但是使用回调函数实现了异步;myFuncWithCallback和MyCallBack之间是异步的;
异步是什么?
异步
不用等所有操作等做完,就可以做其他的处理(比如发消息,发完后,我不需要等你回复,就可以做其他处理)
同步
必须等所有的操作都做完,才返回给用户结果;
再看一个例子;枚举窗口,
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace myhd2
{public partial class Form1 : Form{public delegate void CallBack(int hwnd, int lParam);[DllImport("user32")]public static extern int EnumWindows(CallBack x, int y);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){CallBack myCallBack = new CallBack(Report);EnumWindows(myCallBack, 0); }private void Report(int hwnd, int lParam){textBox1.Text += "Window handle is " + hwnd.ToString() + ";" + Environment.NewLine;} }
}
Win32 api的EnumWindows函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数;运行如下;

枚举和打印输出是异步的;
相关文章:
C#回调函数学习1
回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。…...
leetcode 232 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…...
element UI表单验证,自定义验证规则
validator 可以为指定字段自定义验证函数——这就相当于把前边配置的东西用js按照以前的方式编写验证逻辑了。虽然麻烦点,但是能实现比较复杂的业务逻辑判断。 <el-form-itemlabel"中奖概率"prop"rate":rules"[{ required: true, mes…...
redis 主存复制
1. 前言 Redis的持久化机制,它很好的解决了单台Redis服务器由于意外情况导致Redis服务器进程退出或者Redis服务器宕机而造成的数据丢失问题。 在一定程度上保证了数据的安全性,即便是服务器宕机的情况下,也可以保证数据的丢失非常少。 通常…...
Unity Shader顶点数据疑问
1)Unity Shader顶点数据疑问 2)Unity 2018发布在iOS 16.3偶尔出现画面不动的问题 3)安卓游戏启动后提示“应用程序异常” 这是第352篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知…...
java写一个用于生成雪花id的工具类
我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类 然后 编写代码如下 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1609459200000L; // 设置起始时间戳,可以根据需要进行调整private static final long WORKER…...
淘宝开店装修教程 (2023新版)
一、下载千牛 1. 浏览器打开淘宝 https://www.taobao.com/ 2. 进入 - 千牛卖家中心 3. 进入 - 关于千牛 4. 下载千牛 5. 下载页面 6. 下载安装桌面 二、登录千牛 1. 登录页面 2. 进入 - 千牛工作台 三、pc店铺装修 1. 进入 - pc店铺 2. 进入 - 装修页面 3. 删除没用的模块 从…...
Python傅立叶变换
1. 什么是傅里叶变换? 在数学中,变换技术用于将函数映射到与其原始函数空间不同的函数空间。傅里叶变换时也是一种变换技术,它可以将函数从时域空间转换到频域空间。例如以音频波为例,傅里叶变换可以根据其音符的音量和频率来表示…...
MATLAB向量化编程基础精讲教程
向量化编程是MATLAB中一种重要的编程技术,通过使用向量和矩阵运算代替循环,可以提高代码的执行效率和可读性。本文将介绍MATLAB向量化编程的基础知识,并提供多个案例代码,帮助读者理解和应用向量化编程。 一、向量化编程基础知识…...
【非对称加密算法】RSA算法
一、非对称加密算法 非对称加密算法使用了两个不同的密钥:公钥和私钥。公钥是公开的,可以被任何人使用,而私钥是只有特定的人能够使用的。这种算法的加密和解密过程使用不同的密钥,因此称为非对称加密算法。 在非对称加密算法中…...
【滑动窗口】438. 找到字符串中所有字母异位词
438. 找到字符串中所有字母异位词 滑动窗口解法 创建两个Map 一个记录实际需要的有效字符 另一个记录窗口内的有效字符个数初始化need每次遍历一个字符 判断是不是有效字符 如果是 更新window 另外判断window中有效字符的个数是不是等于need中有效字符的个数 如果是更新valid…...
【PowerQuery】Excel 一分钟以内刷新PowerQuery数据
当需要进行刷新的周期如果小于一分钟,采用数据自动刷新就无法实现自动刷新的目标。那就没有办法了吗?当然不是,这里就是使用VBA来实现自动刷新。这里实现VBA刷新的第一步就是将当前的Excel 保存为带有宏的Excel 文件,如果不带宏则无法运行带有宏代码的Excel文件,保存过程如…...
【C语言】用冒泡排序实现my_qsort
大家好,我是苏貝,本篇博客带大家了解如何用冒泡排序实现my_qsort,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 前言二. 冒泡排序三. 4个参数3.1 第一个参数void* base3.2 第二个参数…...
【css】深入理解flex属性
参考文章: 深入理解Flex属性 flex弹性布局教程-05-项目属性flex-shrink flex:flex-grow flex-shrink flex-basis flex:0 1 0 如何计算flex布局,有flex-shrink和flex-grow的情况下,每个元素的大小 flex-grow生效公式如…...
前端项目开发流程
一 参加需求对称(评审)会议 时间:在产品设计完成以后,进入正式的开发流程之前 组织者:产品&项目经理 目的:统一大家对产品的认识,及时发现产品设计缺陷,尽可能降低后续修改需求的频率 参与者ÿ…...
MybatisPlus逆向工程入门指南:让你的开发更高效、更简洁、更优雅
学会了,可以看看这篇文章:更新中~ 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下…...
通用商城项目(下)
记录一些踩坑的地方,以及理顺一些思路。 通过管理系统页面,完成商品属性分组和商品属性(基本属性)关联维护 属性表 与 属性组表 的功能完善:显示属性组与属性表的一对多关系 前端 1. 引入组件,是否显示使…...
k8s集群使用ingress转发grafana服务
文章目录 前言一、思路二、grafana准备1. grafana-configmap.yaml2. grafana.yaml 三、ingress准备1. ingress.yaml2. grafana-externalname.yaml3. ingress-nginx-controller 四、 本机host文件准备五、访问测试 前言 在k8s集群中,使用ingress服务转发grafana的页…...
MongoDB的备份和恢复
工具 mongodump 和 mongorestore是MongoDB自带的备份恢复工具。 参考文章 ## https://blog.csdn.net/GUDUzhongliang/article/details/131915625## https://blog.csdn.net/mingongge/article/details/130695422 备份 mongodump 参数 -h, --host<hostname> …...
Pytorch学习笔记(GPU训练)
GUP训练 配置pytorch的gup版本主要是在网络模型、输入和标记的数据、损失函数 方式一 直接.cuda()调用,在原有的模型训练代码中的网络模型、输入和标记的数据、损失函数部分直接调用即可 方式二 事先定义好设备device,然后直接.to(device)调用,在原…...
使用Taotoken CLI工具一键配置团队开发环境与统一模型端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置团队开发环境与统一模型端点 当团队需要统一接入多个大模型时,为每位成员手动配置API密钥…...
PromethAI-Backend:构建标准化AI智能体后端框架的工程实践
1. 项目概述与核心价值最近在折腾AI应用开发,特别是想搞一个能处理复杂工作流的智能体系统,发现了一个挺有意思的开源项目——PromethAI-Backend。这名字听着就有点“普罗米修斯”盗火种给人类的意思,挺形象的,它本质上就是一个为…...
告别窄带!用ADS仿真带你搞懂Doherty放大器带宽瓶颈与三种宽带方案
突破Doherty放大器带宽限制:ADS仿真实战与三大宽带方案解析 在射频功率放大器设计中,Doherty结构因其高效率特性成为5G基站和现代通信系统的核心组件。然而传统设计面临严峻的带宽挑战——当信号频率偏离中心频点时,效率可能骤降30%以上。本文…...
Flyway实战:从零到一构建数据库版本管理流水线
1. 为什么你的项目需要Flyway 第一次接触数据库版本管理这个概念时,我正面临一个典型的开发困境:团队里有5个开发人员在同时修改数据库结构,每次发布新版本都像在玩俄罗斯轮盘赌——永远不知道谁会忘记执行哪个SQL脚本。直到生产环境出现数据…...
录音转文字在线版有哪些?这几款免费录音转文字在线工具怎么选?
很多人做录音转文字的时候默认用专业级的转录服务,其实像提词匠这样的轻量工具已经够用了。特别是如果你只是偶尔需要把会议录音、课堂笔记、视频素材转成文字,不必非要上手深度学习复杂的专业软件。下面我梳理了目前市面上主流的录音转文字在线版工具,既有微信小程序也有网页版…...
三步解锁九大网盘高速下载:LinkSwift终极直链解析教程
三步解锁九大网盘高速下载:LinkSwift终极直链解析教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...
《在自定义数据集上训练和运行 YOLOv8 模型的全面指南》
原文:towardsdatascience.com/the-comprehensive-guide-to-training-and-running-yolov8-models-on-custom-datasets-22946da259c3?sourcecollection_archive---------2-----------------------#2024-10-02 现在,通过 Python、命令行或 Google Colab 在…...
终极指南:ChatGPT Google 扩展的API设计与内部模块通信接口规范
终极指南:ChatGPT Google 扩展的API设计与内部模块通信接口规范 【免费下载链接】chatgpt-google-extension This project is deprecated. Check my new project ChatHub: 项目地址: https://gitcode.com/gh_mirrors/ch/chatgpt-google-extension ChatGPT Go…...
NoSleep:3种工作模式,解决Windows自动休眠的9大场景难题
NoSleep:3种工作模式,解决Windows自动休眠的9大场景难题 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 你是否曾因Windows自动休眠而中断重要的远程演…...
JetBrains IDE试用重置终极教程:一键恢复30天完整功能
JetBrains IDE试用重置终极教程:一键恢复30天完整功能 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾因JetBrains IDE试用期到期而烦恼?IntelliJ IDEA、PyCharm、WebStorm等强大开…...
