diff --git a/AudioWatcher.cs b/AudioWatcher.cs index 2a1337b..d5d1c10 100644 --- a/AudioWatcher.cs +++ b/AudioWatcher.cs @@ -16,11 +16,15 @@ namespace WorkIndicator public static event MicrophoneInUseChangedDelegate MicrophoneInUseChanged; + private static Thread _thread; + + private static readonly List _sessionManagers = new List(); + public static void Start() { _manualResetEvent = new ManualResetEvent(false); - var thread = new Thread(delegate () + _thread = new Thread(delegate () { var deviceEnumerator = new MMDeviceEnumerator(); @@ -28,6 +32,8 @@ namespace WorkIndicator { var sessionManager = AudioSessionManager2.FromMMDevice(device); + _sessionManagers.Add(sessionManager); + var sessionEnumerator = sessionManager.GetSessionEnumerator(); sessionManager.SessionCreated += (sessionSender, sessionCreatedEventArgs) => HandleDeviceSession(device, sessionCreatedEventArgs.NewSession); @@ -41,8 +47,8 @@ namespace WorkIndicator _manualResetEvent.WaitOne(); }); - thread.SetApartmentState(ApartmentState.MTA); - thread.Start(); + _thread.SetApartmentState(ApartmentState.MTA); + _thread.Start(); } private static void HandleDeviceSession(MMDevice device, AudioSessionControl audioSessionControl) @@ -60,6 +66,8 @@ namespace WorkIndicator public static void Stop() { + _sessionManagers.Clear(); + _manualResetEvent?.Set(); }