事件的订阅者和发布者之间一旦添加订阅关系,他们之间即存在强引用,如下例所示,事件的订阅者即使被释放掉,发布者发布消息是事件的订阅者还能做出响应。因此当事件的发布者生命周期比事件的订阅者长时,订阅者的引用还一直存在发布者中,导致内存泄漏或者不应该出现调用的情况下产生了调用。对此应该十分注意。
using System;
using System.Collections.Generic;using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WeakEvents
{
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
publisher.MyEvent += subscriber.EventHandlers;
//订阅者订阅事件,正常输出
publisher.OnMyEvent();
subscriber = null;
Console.WriteLine("订阅者释放:");
//订阅者被释放,仍能正常输出
publisher.OnMyEvent();