2016-12-13 12 views
6

Zayıf Olaylar veya daha özel olarak WeakEventManager veya IWeakEventListener gibi görünüyorlar. Net Core, WindowsBase derlemesinin bir parçası oldukları için kullanılamaz.Zayıf Olayı Kullanma .NetCore

Bu özellikle bir alternatif var mı?

Olaylar genellikle uygulamalarda bir bellek sızıntısı kaynağıdır ve zayıf referanslar bu sorunla uğraşmanın harika bir yoludur.

Ben stackoverflow bu konu hakkında herhangi bir bilgi bulamadık

+2

Doğrudan WeakReference özelliğini kullanın. – SLaks

+0

@SLaks WeakReference'ı kullanarak örnek gösterebilir ve örnek olarak, cevabınızı doğru cevabı vermem için bana bir örnek gösterebilir. –

cevap

4

kütüphane Nito.Mvvm.Core yöneticiniz bir WeakCollection<EventHandler> tarafından desteklenen yazmak için bir başlangıç ​​noktası olarak kullanabilir komut sınıfını kullanarak zayıf olayları yapan WeakCanExecuteChagned sınıfı vardır .

Bir FooEventArgs nesnesini alan Foo adlı olaya sahip özel bir sınıf kullanarak basit bir örnek.

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); 
      } 
     } 
    } 
} 
+0

büyük cevap, iki kere oy vermeyi dilerdim, teşekkürler –