/// <summary> /// Use as callback of every downloads progress /// </summary> private void DownloadProgress(DownloadOperation download) { //Thread safety comes first! _dispatcherUtility.RunAsync(() => { //Get the associated song BackgroundDownload var songDownload = ActiveDownloads.FirstOrDefault( p => ((DownloadOperation)p.BackgroundDownload.DownloadOperation).Guid == download.Guid); if (songDownload == null) { return; } Debug.WriteLine("Updating song BackgroundDownload progress for {0}", songDownload); songDownload.BackgroundDownload.Status = download.Progress.Status.ToString().ToSentenceCase().Replace("Running", "Downloading"); if (download.Progress.TotalBytesToReceive > 0) { songDownload.BackgroundDownload.BytesToReceive = download.Progress.TotalBytesToReceive; songDownload.BackgroundDownload.BytesReceived = download.Progress.BytesReceived; } else { songDownload.BackgroundDownload.Status = "Waiting"; } }); }
public async Task DeleteTrackAsync(Track track) { await Task.Factory.StartNew(() => _sqLiteConnection.Delete(track)); await _dispatcherUtility.RunAsync(() => { DeleteRelatedObjects(track); Tracks.Remove(track); track.IsFromLibrary = false; }); }
/// <summary> /// MediaPlayer state changed event handlers. /// Note that we can subscribe to events even if Media Player is playing media in background /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private async void MediaPlayer_CurrentStateChanged(MediaPlayer sender, object args) { CurrentState = sender.CurrentState; await _dispatcherUtility.RunAsync(() => { MediaStateChanged?.Invoke(sender, CurrentState); }); }