public async Task <DownloadResult> DownloadMusicAsync(MHzSongBase song, bool not_show = false, bool show_start = true, bool show_succ_notif = true, bool show_fail_notif = true) { var file = default(StorageFile); try { var folder = await GetBeansproutMusicFolderAsync(); var filename = MHzSongBaseHelper.GetIdentity(song) + StorageHelper.MusicTemporaryExtension; file = await CreateFileInMusicFolderWithNameAsync(folder, filename); var fail_toast = ToastHelper.CreateToastNotificaion( title: GetUIString("Download_Failed") + " : " + song.Title, content: DateTime.Now.ToString("h:mm tt"), imageUri: " -- ", uri: " -- ", logoOverride: song.Picture, voice: "ms-appx:///Voice/yellsedtsr.mp3"); var succeed_toast = ToastHelper.CreateToastNotificaion( title: GetUIString("Download_Succeed") + " : " + song.Title, content: DateTime.Now.ToString("h:mm tt"), imageUri: " -- ", uri: " -- ", logoOverride: song.Picture, voice: "ms-appx:///Voice/haizi.mp3"); var group = BackgroundTransferGroup.CreateGroup(DoubanMusicGroup); group.TransferBehavior = BackgroundTransferBehavior.Serialized; var downloader = new BackgroundDownloader { FailureToastNotification = show_succ_notif ? new Windows.UI.Notifications.ToastNotification(fail_toast) : null, SuccessToastNotification = show_fail_notif ? new Windows.UI.Notifications.ToastNotification(succeed_toast) : null, TransferGroup = group, }; var succeed_trans = Uri.TryCreate(song.Url, UriKind.Absolute, out var do_url); if (!succeed_trans) { throw new DownloadCanNotRunException(); } var operation = downloader.CreateDownload(do_url, file); operation.CostPolicy = BackgroundTransferCostPolicy.UnrestrictedOnly; if (show_start) { ReportHelper.ReportAttentionAsync(GetUIString("Download_Start")); } if (!not_show) { DownloadListAddNewItem(song, operation); operation = await operation.StartAsync(); } else { var control = await operation.StartAsync(); } var mess_succeed = await CreateBJSONMessageAsync(song, folder, file.Path); if (!mess_succeed) { throw new JSONCanNotCreateException(); } await file.RenameAsync(filename.Replace(StorageHelper.MusicTemporaryExtension, StorageHelper.MusicExtension), NameCollisionOption.ReplaceExisting); return(DownloadResult.Successfully); } catch (JSONCanNotCreateException) { await file.DeleteAsync(); return(DownloadResult.Failed); } catch (DownloadCanNotRunException) { await file.DeleteAsync(); return(DownloadResult.Failed); } catch (FileCannNotCreateException) { return(DownloadResult.Failed); } catch (FileExistException) { return(DownloadResult.FileExist); } catch (Exception e) { Debug.WriteLine(e.Message); return(DownloadResult.Failed); } }