Skip to content

Commit 537b586

Browse files
committed
Use WeakEventManager to resolve memory leak
1 parent b279a17 commit 537b586

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

EarTrumpet/AppSettings.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace EarTrumpet;
1010
public class AppSettings
1111
{
1212
public event EventHandler<bool> UseLegacyIconChanged;
13-
public event EventHandler<bool> UseLogarithmicVolumeChanged;
13+
public event EventHandler<EventArgs> UseLogarithmicVolumeChanged;
1414
public event Action FlyoutHotkeyTyped;
1515
public event Action MixerHotkeyTyped;
1616
public event Action SettingsHotkeyTyped;
@@ -164,7 +164,7 @@ public bool UseLogarithmicVolume
164164
set
165165
{
166166
_settings.Set("UseLogarithmicVolume", value);
167-
UseLogarithmicVolumeChanged?.Invoke(this, value);
167+
UseLogarithmicVolumeChanged?.Invoke(this, new EventArgs());
168168
}
169169
}
170170

@@ -174,7 +174,7 @@ public float LogarithmicVolumeMinDb
174174
set
175175
{
176176
_settings.Set("LogarithmicVolumeMinDb", value);
177-
UseLogarithmicVolumeChanged?.Invoke(this, UseLogarithmicVolume);
177+
UseLogarithmicVolumeChanged?.Invoke(this, new EventArgs());
178178
}
179179
}
180180

EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Runtime.InteropServices;
1111
using System.Text;
1212
using System.Threading.Tasks;
13+
using System.Windows;
1314
using System.Windows.Threading;
1415
using Windows.Win32;
1516
using Windows.Win32.Media.Audio;
@@ -193,8 +194,15 @@ public AudioDeviceSession(IAudioDevice parent, IAudioSessionControl session, Dis
193194
}
194195
}
195196

196-
// Potential memory leak: this class is not IDisposable, so we cannot unregister the event.
197-
App.Settings.UseLogarithmicVolumeChanged += (sender, args) => RaisePropertyChanged(nameof(Volume));
197+
WeakEventManager<AppSettings, EventArgs>.AddHandler(
198+
App.Settings,
199+
nameof(AppSettings.UseLogarithmicVolumeChanged),
200+
UseLogarithmicVolumeChangedHandler);
201+
}
202+
203+
private void UseLogarithmicVolumeChangedHandler(object sender, EventArgs e)
204+
{
205+
RaisePropertyChanged(nameof(Volume));
198206
}
199207

200208
~AudioDeviceSession()

EarTrumpet/UI/Controls/VolumeSlider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ public VolumeSlider() : base()
4141
Loaded += OnLoaded;
4242
Unloaded += OnUnloaded;
4343

44-
UseLogarithmicVolumeChangedHandler(null, App.Settings.UseLogarithmicVolume);
44+
UseLogarithmicVolumeChangedHandler(null, new EventArgs());
4545
App.Settings.UseLogarithmicVolumeChanged += UseLogarithmicVolumeChangedHandler;
4646
}
4747

48-
private void UseLogarithmicVolumeChangedHandler(object sender, bool value)
48+
private void UseLogarithmicVolumeChangedHandler(object sender, EventArgs e)
4949
{
5050
UpdateVolumeRange();
5151
SizeOrVolumeOrPeakValueChanged();

0 commit comments

Comments
 (0)