C# 中的Invoke 方法

问题的引发: ?.Invoke()是什么意思。
答案如下:

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

同时又想到UI线程那块,也有invoke,区别是什么?故此总结如下:

在 C# 中,Invoke 方法可用于委托调用、控制 UI 线程操作和反射调用等多种情况。具体使用方法取决于上下文和所涉及的类型。
1、委托的 Invoke 方法:委托类型具有一个名为 Invoke 的方法,用于调用委托所引用的方法。例如,如果有一个委托 myDelegate,你可以使用 myDelegate.Invoke() 来执行委托引用的方法。
delegate void MyDelegate(string message);

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

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

2、控制 UI 线程的 Invoke 方法:在 Windows Forms 或 WPF 应用程序中,如果你在非 UI 线程上处理 UI
元素,需要使用 Invoke 方法将操作切换到 UI 线程上执行,以避免线程安全问题。这是因为 UI
元素通常只能在创建它们的线程上进行访问和修改。

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

3、反射中的 Invoke 方法:在反射中,可以使用 Invoke
方法来调用对象的方法、获取或设置对象的属性值等。这使得在运行时动态地调用和操作对象成为可能。

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

猜你喜欢

转载自blog.csdn.net/weixin_41487423/article/details/131415017