Пример #1
0
        public AudioSession[] GetAudioSessions()
        {
            if (Disposed)
            {
                throw new ObjectDisposedException(nameof(MixerWatcher));
            }

            lock (_disposeLock)
            {
                // Need to be disposed before enumerating again. The order matters.
                _currentSessionEnumerator?.Dispose();
                _currentSessionManager?.Dispose();

                var results = new List <AudioSession>();

                UpdateThread.RunSynchronizedAction(() =>
                {
                    _currentSessionManager    = GetDefaultAudioSessionManager2(DataFlow.Render);
                    _currentSessionEnumerator = _currentSessionManager.GetSessionEnumerator();
                    ProcessBuffer             = Process.GetProcesses();

                    results.AddRange(_currentSessionEnumerator
                                     .Select(x => new AudioSession(x, UpdateThread))
                                     .Where(x => x.CheckSessionIsValid()));
                });

                return(results.ToArray());
            }
        }