Browse Source

WeakEvent: cache Compact() delegate

pull/7301/head
Nikita Tsukanov 5 years ago
parent
commit
a08c4888e0
  1. 5
      src/Avalonia.Base/Utilities/WeakEvent.cs

5
src/Avalonia.Base/Utilities/WeakEvent.cs

@ -49,6 +49,7 @@ public class WeakEvent<TSender, TEventArgs> : WeakEvent where TEventArgs : Event
{ {
private readonly WeakEvent<TSender, TEventArgs> _ev; private readonly WeakEvent<TSender, TEventArgs> _ev;
private readonly TSender _target; private readonly TSender _target;
private readonly Action _compact;
private WeakReference<IWeakEventSubscriber<TEventArgs>>?[] _data = private WeakReference<IWeakEventSubscriber<TEventArgs>>?[] _data =
new WeakReference<IWeakEventSubscriber<TEventArgs>>[16]; new WeakReference<IWeakEventSubscriber<TEventArgs>>[16];
@ -60,7 +61,7 @@ public class WeakEvent<TSender, TEventArgs> : WeakEvent where TEventArgs : Event
{ {
_ev = ev; _ev = ev;
_target = target; _target = target;
_compact = Compact;
_unsubscribe = ev._subscribe(target, OnEvent); _unsubscribe = ev._subscribe(target, OnEvent);
} }
@ -110,7 +111,7 @@ public class WeakEvent<TSender, TEventArgs> : WeakEvent where TEventArgs : Event
if(_compactScheduled) if(_compactScheduled)
return; return;
_compactScheduled = true; _compactScheduled = true;
Dispatcher.UIThread.Post(Compact, DispatcherPriority.Background); Dispatcher.UIThread.Post(_compact, DispatcherPriority.Background);
} }
void Compact() void Compact()

Loading…
Cancel
Save