void Player_PositionChanged(object sender, MpvPlayerPositionChangedEventArgs e)
 {
     Dispatcher.BeginInvoke(new Action(() => {
         if (player.IsPlaying)
         {
             Seek(e.NewPosition, player);
         }
     }));
 }
        private void _player_PositionChanged(object sender, MpvPlayerPositionChangedEventArgs e)
        {
            _maxVideoProgress = e.NewPosition >= _maxVideoProgress ? e.NewPosition : _maxVideoProgress;

            if (!(sender is MpvPlayer mpvPlayer))
            {
                return;
            }
            videoProgressTrackBarControl.BeginInvoke((MethodInvoker) delegate
            {
                try
                {
                    if (mpvPlayer.Remaining == new TimeSpan(0, 0, 0))
                    {
                        return;
                    }
                    videoCurrentProgressLabelControl.Text   = $@"{e.NewPosition.Minutes:D2}:{e.NewPosition.Seconds:D2}";
                    videoRemainingProgressLabelControl.Text =
                        $@"-{mpvPlayer.Remaining.Minutes:D2}:{mpvPlayer.Remaining.Seconds:D2}";
                    if (_isVideoUserValueChanging)
                    {
                        return;
                    }
                    _isVideoAutoValueChanging          = true;
                    videoProgressTrackBarControl.Value = Convert.ToInt32(e.NewPosition.TotalSeconds);
                    _isVideoAutoValueChanging          = false;
                }
                catch (MpvAPIException ex)
                {
                    if (ex.Message == "Error occured: \"property unavailable\".")
                    {
                        //Do nothing as this an error from the user changing the player index faster than MPI Player can keep up
                    }
                    else
                    {
                        throw;
                    }
                }
            });
        }