C#事件处理顺序

本文关键字:顺序 事件处理 | 更新日期: 2023-09-27 17:59:18

场景是缓冲区上的一个事件,当有数据可供收集时,它会通知感兴趣的类。一旦将新数据写入缓冲区,就会触发该事件。当触发时,事件的委托(在感兴趣的类中)开始从缓冲区读取数据。

我的问题是,如果再次触发事件(在该方法完成从缓冲区读取所有数据之前),读取方法会被"重置"吗?还是该事件会等待该方法完成读取数据后再调用它?

C#事件处理顺序

如果在另一个线程上触发,则只有在方法完成读取之前,才能再次触发事件。然后(默认情况下)将在该单独的线程中再次调用事件处理程序。现有方法没有被"重置"的概念,也不会等待已经运行的处理程序完成后再重新启动。

当然,您可以潜在地更改处理程序的工作方式,或者事件的激发方式——也许可以确保事件处理程序只从具有某种事件队列的单个线程调用。不过,我们无法判断这是否适合你的情况。

两者都不是,如果在单独的线程上,它将并行执行,否则执行无论如何都会被阻塞。

除非您在代码中放入了Application.DoEvents()(这是一件可怕的事情),否则您的事件不会中断。

在多线程场景中,它们有可能并行运行。我不会同时使用多个线程和事件,所以我真的不能说太多,但Jon的回答似乎很好地涵盖了这一点。