取消订阅第一事件订阅后,第二事件订阅仍处于活动状态

时间:2020-05-31 23:05:05

标签: c# events

当我有一个事件的两个订阅者,并且在第一个事件订阅中,我要删除第二个订阅,为什么第二个订阅仍被调用?

示例代码:

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

0 个答案:

没有答案