Это довольно легко проверить.Вот программа, которую я настроил, чтобы показать, что происходит:
class Program
{
static void Main(string[] args)
{
Invoker invoker = new Invoker();
Consumer consumer = new Consumer(invoker);
invoker.RunEvents();
}
}
class Invoker
{
public delegate void SomeEventHandler();
public event SomeEventHandler SomeEvent;
public void RunEvents()
{
while (true)
SomeEvent.Invoke();
}
}
class Consumer
{
public Consumer(Invoker invoker)
{
invoker.SomeEvent += HandleSomeEvent;
}
private void HandleSomeEvent()
{
Console.WriteLine("Handling event");
Thread.Sleep(500);
}
}
Вы увидите, что сообщение «Обработка события» выводится на консоль только один раз каждые 500 мс, даже если Invoker () пытаетсявызвать событие как можно быстрее.
Это потому, что обработчик событий работает в том же потоке, что и invoker.Там нет очереди или начать новую тему.Вызывающий просто не может вызвать событие быстрее, чем обработчик обрабатывает событие, потому что они находятся в одном потоке.