Пример #1
0
        public void Dispose()
        {
            if (Disposed)
            {
                return;
            }

            lock (_disposeLock)
            {
                Disposed = true;

                _currentSessionEnumerator?.Dispose();
                _currentSessionManager?.Dispose();
                UpdateThread.Dispose();
            }
        }
Пример #2
0
 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();
     }
 }