BeginInvoke
是C#中Delegate
類的一個方法,它允許你異步地調用一個方法。在事件處理中,BeginInvoke
通常用于將事件處理程序的執行推遲到稍后的時間,從而避免阻塞調用線程。
以下是一個簡單的示例,演示了如何在C#事件處理中使用BeginInvoke
:
using System;
using System.Threading;
public class EventPublisher
{
public event Action<string> CustomEvent;
public void RaiseEvent(string message)
{
if (CustomEvent != null)
{
CustomEvent.BeginInvoke(message, null, null);
}
}
}
public class EventSubscriber
{
public EventSubscriber(EventPublisher publisher)
{
publisher.CustomEvent += OnCustomEvent;
}
private void OnCustomEvent(string message)
{
Console.WriteLine($"Event received: {message}");
}
}
class Program
{
static void Main(string[] args)
{
EventPublisher publisher = new EventPublisher();
EventSubscriber subscriber = new EventSubscriber(publisher);
for (int i = 0; i < 5; i++)
{
publisher.RaiseEvent($"Message {i}");
Thread.Sleep(1000); // 模擬一些工作
}
}
}
在這個示例中,我們有一個EventPublisher
類,它有一個名為CustomEvent
的事件。當RaiseEvent
方法被調用時,它會異步地觸發CustomEvent
事件。EventSubscriber
類訂閱了CustomEvent
事件,并在事件處理程序OnCustomEvent
中打印接收到的消息。
注意,在Main
方法中,我們多次調用publisher.RaiseEvent
,每次調用之間都會暫停一秒鐘。這是為了模擬一些需要時間的工作,同時演示異步事件處理的效果。由于BeginInvoke
是異步的,因此事件處理程序的執行不會阻塞調用線程,而是會在稍后的時間執行。