public void Dispose() { if (Disposed) { return; } lock (_disposeLock) { Disposed = true; _currentSessionEnumerator?.Dispose(); _currentSessionManager?.Dispose(); UpdateThread.Dispose(); } }
private static void FindAudioSources() { using (AudioSessionManager2 audioSessionManager2 = Program.GetDefaultAudioSessionManager2(DataFlow.Render)) { using (AudioSessionEnumerator sessionEnumerator = audioSessionManager2.GetSessionEnumerator()) { foreach (AudioSessionControl audioSessionControl in sessionEnumerator) { AudioSessionControl2 session = audioSessionControl.QueryInterface <AudioSessionControl2>(); if (!Program.audioSessions.ContainsKey(session.ProcessID)) { AudioSessionInformation sessionInformation1 = new AudioSessionInformation(session); Program.audioSessions.Add(session.ProcessID, sessionInformation1); Program.audioLastVol.Add(session.ProcessID, sessionInformation1.volumeObject.MasterVolume * sessionInformation1.audioMeter.PeakValue); Program.FormListDirty(); sessionInformation1.session.Process.Exited += (EventHandler)((sender, e) => { Process process = sender as Process; Program.audioSessions.TryGetValue(process.Id, out AudioSessionInformation sessionInformation); sessionInformation.Dispose(); Program.audioSessions.Remove(process.Id); Program.audioLastVol.Remove(process.Id); Program.FormListDirty(); }); } else { session.Dispose(); } audioSessionControl.Dispose(); } sessionEnumerator.Dispose(); } audioSessionManager2.Dispose(); } }