public bool Play(Music music = null, NetMusic netMusic = null) { var tmpIndex = CurrentIndex; if (music != null) { CurrentIndex = CurrentMusicList.Add(music); } else if (netMusic != null) { CurrentIndex = CurrentMusicList.Add(new Music(netMusic)); } if (CurrentIndex >= 0 && CurrentIndex < CurrentMusicList.Count && CurrentMusicList[CurrentIndex].Origin != NetMusicType.LocalMusic) { var url = ""; if (NetMusicHelper.CheckLink(CurrentMusicList[CurrentIndex].Path)) { url = CurrentMusicList[CurrentIndex].Path; } else { url = NetMusicHelper.GetUrlByNetMusic(CurrentMusicList[CurrentIndex]); if (!NetMusicHelper.CheckLink(url)) { CurrentMusicList.RemoveAt(CurrentIndex); CurrentIndex = tmpIndex; Play(); return(false); } CurrentMusicList[CurrentIndex].Path = url; } if (url.Length <= 0) { CurrentMusicList.Remove(CurrentMusicList[CurrentIndex]); CurrentIndex = tmpIndex; return(false); } } else if (CurrentMusicList.Count > 0 && (CurrentIndex < 0 || CurrentIndex >= CurrentMusicList.Count)) { CurrentIndex = 0; } if (CurrentIndex >= 0 && CurrentIndex < CurrentMusicList.Count) { if (Regex.IsMatch(CurrentMusicList[CurrentIndex].Path, "[http|https]://") && !NetMusicHelper.CheckLink(CurrentMusicList[CurrentIndex].Path)) { CurrentMusicList[CurrentIndex].Path = string.Empty; return(false); } bsp.Stop(); bsp.FileName = CurrentMusicList[CurrentIndex].Path; bsp.Play(); CurrentMusicList[CurrentIndex].Duration = bsp.TotalTime; PlayMusicButton.Visibility = Visibility.Hidden; PauseMusicButton.Visibility = Visibility.Visible; Title = CurrentMusicList[CurrentIndex].Title + " - " + CurrentMusicList[CurrentIndex].Singer; notifyIcon.Text = Title.Length >= 63 ? Title.Substring(0, 60) + "..." : Title; HistoryMusicList.Add(new MusicHistory(CurrentMusicList[CurrentIndex])); SetMiniLable(CurrentMusicList[CurrentIndex]); } return(true); }
private void RefreshLocalListThread() { Dispatcher.Invoke(new Action(() => { RefreshMusicCavas.Visibility = Visibility.Visible; })); var count = 0; List <string> pathList = new List <string>(); foreach (var item in FolderList) { DirectoryInfo TheFolder = new DirectoryInfo(item); foreach (FileInfo NextFile in TheFolder.GetFiles()) { var pattern = ".+?(\\.mp3|\\.wav|\\.flac|\\.wma|\\.ape|\\.m4a)$"; if (Regex.IsMatch(NextFile.Name, pattern, RegexOptions.IgnoreCase)) { pathList.Add(item + NextFile.Name); count++; } } } List <Music> WillBeRemove = new List <Music>(); foreach (var item in LocalMusicList) { if (pathList.Contains(item.Path)) { pathList.Remove(item.Path); } else { WillBeRemove.Add(item); } } for (int i = 0; i < WillBeRemove.Count; i++) { Dispatcher.Invoke(new Action(() => { LocalMusicList.Remove(WillBeRemove[i]); })); } foreach (var item in pathList) { if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) { var music = new Music(item); Dispatcher.Invoke(new Action(() => { LocalMusicList.Add(music); })); } else { object[] args = new object[] { LocalMusicList, item }; Thread staThread = new Thread(new ParameterizedThreadStart(RefreshLocalListSTA)); staThread.SetApartmentState(ApartmentState.STA); staThread.Start(args); staThread.Join(); } Dispatcher.Invoke(new Action(() => { RefreshMusicCountLable.Content = LocalMusicList.Count + "/" + count; })); } Dispatcher.Invoke(new Action(() => { RefreshMusicCavas.Visibility = Visibility.Hidden; })); }