当我有一个事件的两个订阅者,并且在第一个事件订阅中,我要删除第二个订阅,为什么第二个订阅仍被调用?
示例代码:
using System;
public class Program
{
public static void Main()
{
var c = new C();
var a = new A(c);
c.InvokeTestEvent();
}
}
public class A
{
private B _b;
public A(C c)
{
c.TestEvent += OnTestEvent;
_b = new B(c);
}
private void OnTestEvent(object sender, EventArgs e)
{
Console.WriteLine("A: OnTestEvent");
_b.Dispose();
}
}
public class B
{
private C _c;
public B(C c)
{
_c = c;
_c.TestEvent += OnTestEvent;
}
public void Dispose()
{
Console.WriteLine("B: Unsubscribing");
_c.TestEvent -= OnTestEvent;
}
private void OnTestEvent(object sender, EventArgs e)
{
Console.WriteLine("B: OnTestEvent");
}
}
public class C
{
public event EventHandler TestEvent;
public void InvokeTestEvent()
{
TestEvent?.Invoke(this, EventArgs.Empty);
}
}
输出:
A:OnTestEvent
B:取消订阅
B:OnTestEvent