C#事件处理订单

时间:2011-06-17 10:48:06

标签: c# events

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

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

3 个答案:

答案 0 :(得分:2)

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

当然,您可能会更改处理程序的工作方式或事件的触发方式 - 可能确保只从单个线程调用事件处理程序,并使用某种事件队列。我们不可能知道这是否适合你的情况。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在多线程场景中,它们可能并行运行。我不是同时使用多个线程和事件,所以我真的不能说太多,但看起来Jon很好地回答了这个问题。