C#回调函数学习1

这篇具有很好参考价值的文章主要介绍了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,然后也会执行回调函数;

运行如下;

C#回调函数学习1,.Net,回调函数,EnumWindows,异步

假设不用回调函数;代码是如下,

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,.Net,回调函数,EnumWindows,异步
 

枚举和打印输出是异步的; 文章来源地址https://www.toymoban.com/news/detail-709605.html

到了这里,关于C#回调函数学习1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue js 回调函数 异步处理 为什么要 let that = this

    1 异步就是开个事务( 只有主线程 等主线程空闲 ),用that 值 做处理,然后返回处理结果,而that的值是开启 事务那一刻 的this的值.而在主线程处理的时候,this的一直在变化, that的值保留在那一刻 ps 或是将本obj 传递给其他的obj使用处理 ps 开启新事务或开启新子线程都是 在新的ob

    2024年02月11日
    浏览(54)
  • 巧用回调函数解决微信小程序与后台数据交互出现的异步问题

            微信小程序端需要发送一个包含文字与图片的表单数据给后端,我一开始的思路是 先 上传图片得到临时的URL, 后 执行POST请求将表单数据发送给后端,但后端只能获取到文字,而图片URL却始终获取不到。         注意看我上面的思路, 一先一后 ,无形中将两

    2024年02月16日
    浏览(42)
  • C# 中的回调函数

    引言 回调函数是一种在编程中常用的概念,它在 C# 中扮演着重要的角色。本文将介绍回调函数的概念、语法和应用,并讨论如何设计优化和重用回调函数,以及它们在并发编程中的用途。 回调函数是指将一个函数作为参数传递给另一个函数,并在被调用函数执行完毕后,再

    2024年02月20日
    浏览(35)
  • JUC并发编程学习笔记(十四)异步回调

    Future设计的初衷:对将来的某个事件的结果进行建模 在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理 点进具体实现类中,查看方法,可以看到CompletableFuture中的异步内部类,里面是实现的异步方法 以及一些异步方法

    2024年02月05日
    浏览(45)
  • 【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式

    委托是一种类型,它可以存储对一个或多个方法的引用。它类似于C/C++中的函数指针,允许您将方法作为参数传递、存储和调用。 写法: delegate return_type delegate_name( ); return_type :表示委托所引用方法的返回类型。 delegate_name :表示委托的名称。 parameters :表示委托所引用方法

    2024年02月06日
    浏览(56)
  • Node.js 学习系列(四)—— 回调函数

    Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在任务完成后就会被调用, Node 使用了大量的回调函数, Node 的所有 API 都支持回调函数。 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完

    2024年02月05日
    浏览(31)
  • Baumer工业相机堡盟工业相如何使用BGAPISDK通过两种不同的方法进行图像回调函数的使用(C#)

    ​ Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度

    2024年02月08日
    浏览(41)
  • 【opencv学习】鼠标回调函数、鼠标控制画矩形

    1.回调函数可以简单理解为一边做一件事的同时做另一件事,优化之前的实现完一个函数后才实现另一个的问题。 鼠标回调函数就是一边鼠标操作画图,一边显示画出的图像。 2.实现一个矩形rec只需要知道一个左上角的坐标和宽高即可实例化对象。

    2024年02月14日
    浏览(50)
  • C#基础学习--异步编程

    目录 什么是异步 async/await 特性的结构  什么是异步方法  异步方法的控制流 await 表达式 启动程序时,系统会在内存中创建一个新的 进程 。进程是构成运行程序的资源的集合。进程是构成运行程序的资源的集合。这些资源包括虚地址空间,文件句柄和许多其他程序运行所需

    2023年04月25日
    浏览(39)
  • c# 学习笔记 - 异步编程

    1.1 简单介绍   异步编程官方参考文档:异步编程     1.2 async/await 使用   细节注意 async 用来修饰方法,表示这个方法可以成为一个异步方法,但是如果内部没有搭配使用 await 的话其作用还是等效于一个同步方法 await 必须用于在 async 修饰的异步方法内使用,

    2024年01月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包