public class A
{
private B NotifyObj = new B();
public A()
{
NotifyObj.NotifyEvent += Notified;
}
private async void Notified()
{
}
}
Class B
{
public event Action NotifyEvent;
public CallEvent()
{
NotifyEvent?.Invoke();
}
}
在上面的代码(使用 C# WPF)中,A 类在主线程中运行,B 类在单独的线程中运行。如果主线程正忙并且其他线程调用 CallEvent() 会发生什么。是要在消息队列中获取队列还是会停止当前执行并执行此操作然后继续之前的执行。基本上,NotifyEvent?.Invoke() 的工作方式与 C++ 中的 Postmessage/SendMessage 类似
如果从单独的线程调用该方法,它将在单独的线程上执行。
如果您需要强制主线程(如果不忙)运行一些代码,例如处理 UI,您可以检查
Dispatcher.Invoke
方法。