private void PlayAudioFile(int idx) { var album = mContentList.GetSelectedAlbum(); var af = album.AudioFileNth(idx); switch (mPlaybackController.GetState()) { case PlaybackController.State.Playing: case PlaybackController.State.Paused: // 再生中。またはポーズ中。 if (mPlaybackController.LoadedGroupId() == af.GroupId) { // 再生中のグループと同じグループである。 // 再生曲を切り替える。 mPlaybackController.Play(idx); UpdatePlaybackControlState(); return; } else { // 異なるグループの曲なので再ロードが必要。 // 再生停止してロードする。 mPlaybackController.Stop(); } break; default: break; } if (!SetWasapiParams()) { return; } // 選択曲が含まれるグループをロードする。 var args = new BackgroundLoadArgs( mContentList.GetSelectedAlbum(), idx, mListBoxPlaybackDevice.SelectedIndex); var playList = CreatePlayList(args.Album, args.First); int ercd = mPlaybackController.PlaylistCreateStart(args.DeviceIdx, args.Album.AudioFileNth(args.First)); if (ercd < 0) { MessageBox.Show(string.Format(Properties.Resources.ErrorPlaybackStartFailed, ercd)); return; } // お気に入りデバイスの更新。 mPreference.PreferredDeviceIdString = mPlaybackController.GetDeviceAttribute(args.DeviceIdx).DeviceIdString; // PlaybackController stateがLoadingになった。 UpdatePlaybackControlState(); mBackgroundLoad = new BackgroundWorker(); mBackgroundLoad.WorkerReportsProgress = true; mBackgroundLoad.WorkerSupportsCancellation = true; mBackgroundLoad.DoWork += new DoWorkEventHandler(OnBackgroundLoad_DoWork); mBackgroundLoad.ProgressChanged += new ProgressChangedEventHandler(OnBackgroundLoad_ProgressChanged); mBackgroundLoad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnBackgroundLoad_RunWorkerCompleted); mBackgroundLoad.RunWorkerAsync(args); }
public BackgroundLoadResult(BackgroundLoadArgs args, bool result) { Args = args; Result = result; }