private void DoOnPlaylistChanged(object sender, Playlist playlist)
        {
            if (OnPlaylistChanged != null && disablePlaylistChangeEvent == 0)
            {
                MP_Params param = new MP_Params();
                param.Params = new object[] { OnPlaylistChanged, this, playlist };

                SynchronizationContext sc;
                lock (lockVAR)
                {
                    sc = synchronizationContext;
                } //lock
                if (sc != null)
                {
                    sc.Post(HandleOnEventCallUserCode, param);
                }
                else
                {
                    HandleOnEventCallUserCode(param);
                }
            }
        }
        private void DoEvent_MP_OnPlaylist(MP_OnPlaylist doEvent, object sender, Playlist playlist)
        {
            if (doEvent != null && playlist != null)
            {
                MP_Params param = new MP_Params();
                param.Params = new object[] { doEvent, sender, playlist };

                SynchronizationContext sc;
                lock (lockVAR)
                {
                    sc = synchronizationContext;
                } //lock
                if (sc != null)
                {
                    sc.Post(HandleOnEventCallUserCode, param);
                }
                else
                {
                    HandleOnEventCallUserCode(param);
                }
            }
        }
        // =======================================================================================================


        public Mediaplayer(string email = "", string registrationKey = "")
        {
            this.synchronizationContext = SynchronizationContext.Current;

            this.email = email;
            this.registrationKey = registrationKey;

            playlists = new List<Playlist>();
            currentPlaylist = new Playlist();
            playlists.Add(currentPlaylist);
            netStreams = new List<NetStreamHelper>();
            failedPlayCount = 0;

            // Link event so we can expose them to the "MediaPlayer" user
            currentPlaylist.OnPlaylistChanged += new PL_OnPlaylistChanged(DoOnPlaylistChanged);
            currentPlaylist.OnCurrentMediaItemChanged += new PL_OnMediaItemChanged(DoOnCurrentMediaItemChanged);
            currentPlaylist.OnPreviousMediaItemChanged += new PL_OnMediaItemChanged(DoOnPreviousMediaItemChanged);
            currentPlaylist.OnNextMediaItemChanged += new PL_OnMediaItemChanged(DoOnNextMediaItemChanged);

            gcHandle = GCHandle.Alloc(this, GCHandleType.Normal);
            BassNetInitialize();

            messageQueue = new List<MP_Message>();
            CreateThread();
        }
 private void DoOnPlaylistEnd(object sender, Playlist playlist)
 {
     Console.WriteLine("OnPlaylistEnd. --=" + playlist.PlaylistName + "=--");
     Console.WriteLine();
 }
        /// <summary>
        /// Deep clone, except for the MediaItem(s)
        /// </summary>
        public object Clone()
        {
            Playlist clone = new Playlist(this.playlistName);

            foreach (MediaItem item in this.playlist)
            {
                clone.playlist.Add(item);
            } //foreach
            clone.currentMediaItemIndex = this.currentMediaItemIndex;
            clone.nextMediaItemIndex  = this.nextMediaItemIndex ;
            clone.previousMediaItemIndex = this.previousMediaItemIndex;
            foreach (int itemIndex in this.previousHistoryList)
            {
                clone.previousHistoryList.Add(itemIndex);
            } //foreach
            clone.repeatMode = this.repeatMode;
            clone.shuffleMode = this.shuffleMode;
            clone.OnCurrentMediaItemChanged = this.OnCurrentMediaItemChanged;
            clone.OnPreviousMediaItemChanged = this.OnPreviousMediaItemChanged;
            clone.OnNextMediaItemChanged = this.OnNextMediaItemChanged;

            return clone;
        }
        private void DoOnPlaylistEnd(object sender, Playlist playlist)
        {
            AddLogLine("OnPlaylistEnd. --=" + playlist.PlaylistName + "=--");
            AddLogLine("");

            // We are is stop state!
            bTogglePlay.Text = "Play";
        }
 private void DoOnPlaylistStart(object sender, Playlist playlist)
 {
     AddLogLine("");
     AddLogLine("OnPlaylistStart. --=" + playlist.PlaylistName + "=--");
 }