From 0450a4084f1a1197af65393c10bd9d881c97fc5c Mon Sep 17 00:00:00 2001 From: Scott Whitney Date: Mon, 10 Jan 2022 11:01:23 +1030 Subject: [PATCH 1/2] Removed private WeakEventListener NetworkConnectionStateTrigger.cs had a private duplicate version of WeakEventListener. This has now been removed and uses the existing WeakEventListener in the toolkit. --- .../Triggers/NetworkConnectionStateTrigger.cs | 87 ++++--------------- 1 file changed, 16 insertions(+), 71 deletions(-) diff --git a/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs b/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs index 7f58966bc55..ab88ee7448b 100644 --- a/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs +++ b/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using Microsoft.Toolkit.Uwp.Helpers; using Windows.Networking.Connectivity; using Windows.System; using Windows.UI.Xaml; @@ -14,6 +15,8 @@ namespace Microsoft.Toolkit.Uwp.UI.Triggers /// public class NetworkConnectionStateTrigger : StateTriggerBase { + private readonly WeakEventListener _weakEvent; + private DispatcherQueue _dispatcherQueue; /// @@ -22,13 +25,14 @@ public class NetworkConnectionStateTrigger : StateTriggerBase public NetworkConnectionStateTrigger() { _dispatcherQueue = DispatcherQueue.GetForCurrentThread(); - var weakEvent = - new WeakEventListener(this) - { - OnEventAction = (instance, source) => NetworkInformation_NetworkStatusChanged(source), - OnDetachAction = (weakEventListener) => NetworkInformation.NetworkStatusChanged -= weakEventListener.OnEvent - }; - NetworkInformation.NetworkStatusChanged += weakEvent.OnEvent; + + _weakEvent = new WeakEventListener(this) + { + OnEventAction = (instance, source, eventArgs) => { NetworkInformation_NetworkStatusChanged(source); }, + OnDetachAction = listener => { NetworkInformation.NetworkStatusChanged -= OnNetworkEvent; } + }; + + NetworkInformation.NetworkStatusChanged += OnNetworkEvent; UpdateState(); } @@ -37,6 +41,11 @@ private void NetworkInformation_NetworkStatusChanged(object sender) _ = _dispatcherQueue.EnqueueAsync(UpdateState, DispatcherQueuePriority.Normal); } + private void OnNetworkEvent(object source) + { + _weakEvent?.OnEvent(source, EventArgs.Empty); + } + private void UpdateState() { bool isConnected = false; @@ -69,70 +78,6 @@ private static void OnConnectionStatePropertyChanged(DependencyObject d, Depende var obj = (NetworkConnectionStateTrigger)d; obj.UpdateState(); } - - private class WeakEventListener - where TInstance : class - { - /// - /// WeakReference to the instance listening for the event. - /// - private WeakReference _weakInstance; - - /// - /// Gets or sets the method to call when the event fires. - /// - public Action OnEventAction { get; set; } - - /// - /// Gets or sets the method to call when detaching from the event. - /// - public Action> OnDetachAction { get; set; } - - /// - /// Initializes a new instance of the class. - /// - /// Instance subscribing to the event. - public WeakEventListener(TInstance instance) - { - if (instance == null) - { - throw new ArgumentNullException("instance"); - } - - _weakInstance = new WeakReference(instance); - } - - /// - /// Handler for the subscribed event calls OnEventAction to handle it. - /// - /// Event source. - public void OnEvent(TSource source) - { - TInstance target = (TInstance)_weakInstance.Target; - if (target != null) - { - // Call registered action - OnEventAction?.Invoke(target, source); - } - else - { - // Detach from event - Detach(); - } - } - - /// - /// Detaches from the subscribed event. - /// - public void Detach() - { - if (OnDetachAction != null) - { - OnDetachAction(this); - OnDetachAction = null; - } - } - } } /// From bc06cdd0abecc4b2cb6d8b5b4445fdfd9c8e2ffc Mon Sep 17 00:00:00 2001 From: Scott Whitney <79826944+puppetsw@users.noreply.github.com> Date: Thu, 20 Jan 2022 08:20:02 +1030 Subject: [PATCH 2/2] Updated NetworkConnectionStateTrigger OnEventAction --- .../Triggers/NetworkConnectionStateTrigger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs b/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs index ab88ee7448b..20ec63445c9 100644 --- a/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs +++ b/Microsoft.Toolkit.Uwp.UI/Triggers/NetworkConnectionStateTrigger.cs @@ -28,7 +28,7 @@ public NetworkConnectionStateTrigger() _weakEvent = new WeakEventListener(this) { - OnEventAction = (instance, source, eventArgs) => { NetworkInformation_NetworkStatusChanged(source); }, + OnEventAction = static (instance, source, eventArgs) => { instance.NetworkInformation_NetworkStatusChanged(source); }, OnDetachAction = listener => { NetworkInformation.NetworkStatusChanged -= OnNetworkEvent; } };