提问人:renji 提问时间:11/15/2023 更新时间:11/15/2023 访问量:37
事件操作 在 C 语言中从不同的线程调用#
event Action Invoke from different thread in C#
问:
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
答:
1赞
Emanuele
11/15/2023
#1
如果从单独的线程调用该方法,它将在单独的线程上执行。
如果你需要强制主线程(如果不忙的话)运行一些代码,例如处理 UI,你可以检查方法。Dispatcher.Invoke
评论
0赞
renji
11/15/2023
因此,Notified() 在 NotifyEvent?.调用()?
0赞
Emanuele
11/16/2023
它应该,但如果你在回调中放置一个断点并检查当前线程,你可以尝试一下
1赞
renji
11/16/2023
event.invoke() 处理程序在与 event.invoke() 相同的线程中执行
评论