在.NetCore中使用弱事件

Moh*_*iba 7 c# asp.net-core

它看起来像弱事件或更具体WeakEventManagerIWeakEventListener在.Net Core中不可用,因为它们是WindowsBase程序集的一部分.

有这个功能的替代品吗?

事件通常是应用程序中内存泄漏的来源,而弱引用是处理此问题的好方法.

我在stackoverflow中找不到关于此主题的任何信息

Sco*_*ain 8

Nito.Mvvm.Core有一个WeakCanExecuteChagned类,它使用命令类来执行弱事件,您可以将其用作编写由a支持的经理的起点WeakCollection<EventHandler>.

下面是一个使用自定义类的简单示例,该类具有一个Foo接收FooEventArgs对象的事件.

public class MyClass
{
    private readonly WeakCollection<EventHandler<FooEventArgs>> _foo = new WeakCollection<EventHandler<FooEventArgs>>();

    public event EventHandler<FooEventArgs> Foo
    {
        add
        {
            lock (_foo)
            {
                _foo.Add(value);
            }
        }
        remove
        {
            lock (_foo)
            {
                _foo.Remove(value);
            }
        }
    }

    protected virtual void OnFoo(FooEventArgs args)
    {
        lock (_foo)
        {
            foreach (var foo in _foo.GetLiveItems())
            {
                foo(this, args);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)