Método de invocación en C#

La causa de la pregunta: ¿Qué significa .Invoke()?
La respuesta es la siguiente:

 //C# 5
var handler = Event;
if (handler != null)
{
    
    
handler(source, e);
}
//C# 6
var handler = Event;
handler?.Invoke(source, e);

Al mismo tiempo, también pienso en el subproceso de la interfaz de usuario, también se invoca, ¿cuál es la diferencia? Así que el resumen es el siguiente:

En C#, el método Invoke se puede usar en una variedad de situaciones, como la invocación de delegados, el control de operaciones de subprocesos de interfaz de usuario y la invocación de reflexión. Cómo usarlo depende del contexto y los tipos involucrados.
1. Método de invocación del delegado: el tipo de delegado tiene un método denominado Invocar, que se utiliza para llamar al método al que hace referencia el delegado. Por ejemplo, si tiene un delegado myDelegate, puede usar myDelegate.Invoke() para ejecutar el método al que hace referencia el delegado.
delegar void MyDelegate(mensaje de cadena);

void PrintMessage(string message)
{
    
    
    Console.WriteLine(message);
}

MyDelegate myDelegate = PrintMessage;
myDelegate.Invoke("Hello, World!"); // 使用 Invoke 方法调用委托引用的方法

2. El método Invoke para controlar el subproceso de la interfaz de usuario: en Windows Forms o aplicaciones WPF, si procesa elementos de la interfaz de usuario en un subproceso que no es de la interfaz de usuario,
debe usar el método Invoke para cambiar la operación al subproceso de la interfaz de usuario para evitar problemas de seguridad del subproceso. . Esto se debe a que,
por lo general, solo se puede acceder a los elementos de la interfaz de usuario y modificarlos en el subproceso que los creó.

void UpdateUI(string message)
{
    
    
    if (textBox.InvokeRequired)
    {
    
    
        textBox.Invoke(new Action<string>(UpdateUI), message); // 使用 Invoke 方法切换到 UI 线程
    }
    else
    {
    
    
        textBox.Text = message;
    }
}

3. El método Invoke en la reflexión: en la reflexión, puede usar el
método Invoke para llamar al método del objeto, obtener o establecer el valor de propiedad del objeto, etc. Esto hace posible llamar y manipular objetos dinámicamente en tiempo de ejecución.

MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
object result = methodInfo.Invoke(instance, parameters); // 使用 Invoke 方法调用方法

Supongo que te gusta

Origin blog.csdn.net/weixin_41487423/article/details/131415017
Recomendado
Clasificación