看起来弱势事件或更具体的WeakEventManager
或IWeakEventListener
在.Net Core中不可用,因为它们是 WindowsBase 程序集的一部分。
是否有此功能的替代品?
事件通常是应用程序中内存泄漏的来源,弱引用是处理此问题的好方法。
我在stackoverflow
中找不到关于此主题的任何信息答案 0 :(得分:7)
库Nito.Mvvm.Core有一个WeakCanExecuteChagned
类,它使用命令类来执行弱事件,您可以将其用作编写由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);
}
}
}
}
答案 1 :(得分:0)
我的库 System.Waf.Core 提供了一个 WeakEvent 实现,可用作 WeakEventManager
的替代方案。
示例:
public class Publisher : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
}
public class Subscriber
{
public void Init(Publisher publisher)
{
// Instead of publisher.PropertyChanged += Handler; use the following statement:
WeakEvent.PropertyChanged.Add(publisher, Handler)
}
public void Handler(object? sender, PropertyChangedEventArgs e) { }
}
可以在此 Wiki 页面 Weak Event 上找到更多详细信息。