/// <summary> /// Closes the tray and releases all resources. /// </summary> /// <summary> /// <c>Dispose(bool disposing)</c> executes in two distinct scenarios. /// If disposing equals <c>true</c>, the method has been called directly /// or indirectly by a user's code. Managed and unmanaged resources /// can be disposed. /// </summary> /// <param name="disposing">If disposing equals <c>false</c>, the method /// has been called by the runtime from inside the finalizer and you /// should not reference other objects. Only unmanaged resources can /// be disposed.</param> /// <remarks>Check the <see cref="IsDisposed"/> property to determine whether /// the method has already been called.</remarks> private void Dispose(bool disposing) { //don't do anything if the component is already disposed if (IsDisposed || !disposing) { return; } lock (this) { IsDisposed = true; //deregister application event listener Application.Current.Exit -= OnExit; //stop timers singleClickTimer.Dispose(); balloonCloseTimer.Dispose(); //dispose message sink messageSink.Dispose(); //remove icon RemoveTaskbarIcon(); } }
/// <summary> /// Closes the tray and releases all resources. /// </summary> /// <summary> /// <c>Dispose(bool disposing)</c> executes in two distinct scenarios. /// If disposing equals <c>true</c>, the method has been called directly /// or indirectly by a user's code. Managed and unmanaged resources /// can be disposed. /// </summary> /// <param name="disposing">If disposing equals <c>false</c>, the method /// has been called by the runtime from inside the finalizer and you /// should not reference other objects. Only unmanaged resources can /// be disposed.</param> /// <remarks>Check the <see cref="IsDisposed"/> property to determine whether /// the method has already been called.</remarks> private void Dispose(bool disposing) { // don't do anything if the component is already disposed if (IsDisposed || !disposing) { return; } lock (lockObject) { IsDisposed = true; // de-register application event listener if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime lifetime) { lifetime.Exit -= OnExit; } // dispose message sink messageSink.Dispose(); // remove icon RemoveTaskbarIcon(); } }
public void Dispose() { if (_messageSink == null) { return; } _messageSink.OnWinProc -= WndProc; _messageSink.Dispose(); _messageSink = null; _taskbarIcon.Visibility = Visibility.Collapsed; _taskbarIcon.Dispose(); _taskbarIcon = null; }