C#中委托和事件联合一起的用法
时间: 2024-09-18 14:01:39 浏览: 39
C#委托事件.zip
在C#中,委托和事件经常结合使用以实现异步编程和事件驱动模型。以下是它们联合使用的简单示例:
**定义委托:**
```csharp
public delegate void SayHelloEventHandler(object sender, EventArgs e);
```
这定义了一个名为`SayHelloEventHandler`的委托,用于表示可以接收`SayHello`事件的方法。
**定义事件:**
```csharp
public event SayHelloEventHandler SayHelloEvent;
```
这里我们定义了一个名为`SayHelloEvent`的事件,它基于前面定义的委托类型。
**定义处理方法:**
```csharp
public void RaiseHello()
{
if (SayHelloEvent != null)
{
SayHelloEvent(this, new EventArgs()); // 触发事件
}
}
```
这个方法用于触发事件,当`RaiseHello`被调用时,所有订阅该事件的处理程序会被执行。
**实例化并订阅事件:**
```csharp
// 创建委托实例,指向特定方法
private void OnSayHello(object sender, EventArgs e)
{
Console.WriteLine("Hello from another thread!");
}
program.SayHelloEvent += OnSayHello;
// 异步地调用事件引发者的方法
new Thread(() => program.RaiseHello()).Start();
```
在这里,我们在主线程上创建一个`OnSayHello`方法作为事件处理程序,并通过`+=`操作符添加到事件中。然后在一个新线程上异步调用`RaiseHello`,这样`OnSayHello`就会在另一个线程上执行。
**总结:**
- C#的委托和事件允许在不同的线程之间传递消息,实现了非阻塞的并发处理。
- 委托存储的是方法的引用,而事件则是这些方法的集合。
- 通过事件,我们可以轻松地通知其他组件(如控制台)某件事情已经发生,即使在不同的线程中。
阅读全文