C# 事件处理顺序

C# 事件处理顺序,c#,events,C#,Events,该场景是缓冲区上的一个事件,在有数据可供收集时通知感兴趣的类。一旦新数据写入缓冲区,就会触发该事件。触发此命令时,事件的委托(在相关类中)开始从缓冲区读取数据 我的问题是,如果事件再次触发(在方法从缓冲区读取完所有数据之前)读取方法是“重置”还是事件在再次调用之前等待方法完成数据读取?如果在另一个线程上触发事件,则只能在方法完成读取之前再次触发该事件。然后(默认情况下)将在该单独线程中再次调用事件处理程序。没有将现有方法“重置”的概念,也不会等到已经运行的处理程序完成后再触发 当然,您可以潜在地

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


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

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


当然,您可以潜在地更改处理程序的工作方式,或者事件的触发方式—也许可以确保事件处理程序仅从一个线程调用,并带有某种类型的事件队列。但是,我们无法判断这是否适合您的情况。

如果在不同的线程上,它也会并行执行,否则执行将被阻塞。

除非您在代码中放入了
Application.DoEvents()
(这是一件可怕的事情)那么你的活动就不会被打断了


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

除非您将其编码为提前停止,否则该方法将继续使用。