I want bind the master sound volume of windows to a slider in my program. So I searched and found some ways to GET or SET master volume + some libraries like these:
- Change master audio volume from XP to Windows 8 in C#
 - Handling volume control in C#
 Some where I see a code with LOOP to get volume value: loop
- Some where I see a code with TIMER to get volume value...
 - Also I see some samples to determine volume but after test one of them I saw some errors at runtime in Windows 8: C# – Adjust master volume in Vista and Windows 7
 
EDIT:
Now i have the following class. i create an instance of it and use propertchange event to show volume by Trace.WriteLine. but when i change the windows volume it cause an unhandeled error!
public class AudioEndpointVolumeEnforcer : INotifyPropertyChanged
{
    private MMDeviceEnumerator mmDeviceEnumerator;
    private MMDevice mmDevice;
    private AudioEndpointVolume audioEndpointVolume;
    private bool _deviceIsMuted;
    private int _desiredVolume;
    private int _volumePercent;
    public AudioEndpointVolumeEnforcer()
    {
        try
        {
            mmDeviceEnumerator = new MMDeviceEnumerator();
            mmDevice = mmDeviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
            audioEndpointVolume = mmDevice.AudioEndpointVolume;
            audioEndpointVolume.OnVolumeNotification += data =>
            {
                VolumePercent = Convert.ToInt16(data.MasterVolume*100);
                _deviceIsMuted = data.Muted;
            };
            DesiredVolume = 65;
        }
        catch (Exception ex)
        {
            // Logging logic here
        }
    }
    public int DesiredVolume
    {
        get { return _desiredVolume; }
        private set
        {
            if (_desiredVolume == value) return;
            _desiredVolume = value;
            //NotifyOfPropertyChange();
            OnPropertyChanged("DesiredVolume");
            Enforce(_desiredVolume);
        }
    }
    public int VolumePercent
    {
        get { return _volumePercent; }
        private set
        {
            if (_volumePercent == value) return;
            _volumePercent = value;
            if (_volumePercent != _desiredVolume)
            {
                _volumePercent = _desiredVolume;
                Enforce(_volumePercent);
            }
        }
    }
    public void Enforce(int pct, bool mute = false)
    {
        var adjusted = Convert.ToInt16(audioEndpointVolume.MasterVolumeLevelScalar*100);
        if (adjusted != DesiredVolume)
        {
            audioEndpointVolume.MasterVolumeLevelScalar = pct/100f;
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}
Use the class:
 // Inside my window cunstractor >>
 audioVolume = new AudioEndpointVolumeEnforcer();
 audioVolume.PropertyChanged += MasterAudioVolumeChanged;
 private void MasterAudioVolumeChanged(object obj, PropertyChangedEventArgs eventArgs)
 {
   Trace.WriteLine(eventArgs.PropertyName+" - "+audioVolume.DesiredVolume);
 }
Runtime Error:
......................................
The Output panel show Access violation error:
The program '[18488] Audio.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'
Edit
I tested the above code by breakpoints and trace. the above error happens sometimes in the bellow part:
audioEndpointVolume.OnVolumeNotification += data =>
{
    VolumePercent = Convert.ToInt16(data.MasterVolume*100);
    _deviceIsMuted = data.Muted;
};
For example sometimes it happens in this line:
_deviceIsMuted = data.Muted;
But when i go to the next step by F11 it dose not show a normal error inside the program! It cause the bellow error window and application force closing!
......................................
Access violation