Aprendizaje 1 de la función de devolución de llamada de C#

Una función de devolución de llamada es un puntero de función que apunta a una función de devolución de llamada definida por el usuario. Pasamos el puntero de esta función de devolución de llamada como parámetro a otra función. Una vez que la función completa su trabajo, notificará a la persona que llama sobre el resultado del procesamiento a través del puntero de esta función de devolución de llamada.

    Esta definición proviene de Internet;

Veamos un ejemplo: esta es una función de devolución de llamada implementada mediante un delegado;

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();
        }
    }
}

delegado privado void MyDelegate(int a); 

    Defina un delegado sin valor de retorno y un parámetro entero;

myFuncWithCallback es una función definida por el usuario, una función con una función de devolución de llamada;

MiDevoluciónDeLlamada(int n)

{

.......

}

    Este es el cuerpo de la función de devolución de llamada;

nuevo MyDelegate(MyCallBack), este es el delegado instanciado;

Cuando se hace clic en el botón, se llama a myFuncWithCallback y luego también se ejecuta la función de devolución de llamada;

Ejecute de la siguiente manera;

Suponiendo que no se utiliza ninguna función de devolución de llamada, el código es el siguiente:

clase parcial pública Formulario1: Formulario
    {         Formulario1 público()         {             InicializarComponente();         }



        botón vacío privado1_Click (remitente del objeto, EventArgs e)
        {             myFuncWithCallback (15);         }

        privado vacío myFuncWithCallback(int b)
        {             int resultado = b * b;             MiDevoluciónDeLlamada(resultado);         }


        privado vacío MyCallBack(int n)
        {             textBox1.Text = n.ToString();         }     }


 Lo mismo ocurre con la funcionalidad;

Sin embargo, la asincronía se logra mediante funciones de devolución de llamada; myFuncWithCallback y MyCallBack son asincrónicas;

¿Qué es asincrónico?

asincrónico

    No necesita esperar a que se completen todas las operaciones antes de poder realizar otro procesamiento (como enviar un mensaje. Después de enviarlo, no necesito esperar su respuesta antes de que pueda realizar otro procesamiento).

Sincronizar

  Debe esperar hasta que se completen todas las operaciones antes de devolver los resultados al usuario;

Veamos otro ejemplo; ventana de enumeración,

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;
        }  
    }
}

La función EnumWindows de la API de Win32 enumera las ventanas de nivel superior en todas las pantallas y pasa el identificador de la ventana a la función de devolución de llamada definida por la aplicación; ejecútela de la siguiente manera;
 


 

La enumeración y la impresión son asincrónicas; 

Supongo que te gusta

Origin blog.csdn.net/bcbobo21cn/article/details/132868106
Recomendado
Clasificación