后台下载程序问题 Windows Phone 8.1

Issues with background downloader Windows Phone 8.1

我在使用后台下载器下载多个文件时遇到问题。我的 HandleDownloadAsync 方法出现 "Object not set to an instance of an Object" 错误。这是我的代码。

    private async Task StartDownload(List<DownloadData> data)
    {
        foreach (DownloadData song in data)
        {
            Uri source = new Uri(song.downloadUrl);

            // Create folder stucture
            StorageFolder artistFolder = await KnownFolders.MusicLibrary.CreateFolderAsync(song.artistName, CreationCollisionOption.OpenIfExists);
            StorageFolder releaseFolder = await artistFolder.CreateFolderAsync(song.releaseName, CreationCollisionOption.OpenIfExists);

            // Create file
            StorageFile destinationFile;
            try
            {
                destinationFile = await releaseFolder.CreateFileAsync(song.fileName, CreationCollisionOption.GenerateUniqueName);
            }
            catch
            {
                throw;
            }

            BackgroundDownloader downloader = new BackgroundDownloader();
            DownloadOperation download = downloader.CreateDownload(source, destinationFile);

            List<DownloadOperation> requestOperations = new List<DownloadOperation>();
            requestOperations.Add(download);

            await HandleDownloadAsync(download, true);
        }
    }

和方法

    private async Task HandleDownloadAsync(DownloadOperation download, bool start)
    {
        try
        {
            // Store the download for pause/resume
            activeDownloads.Add(download); // Error occurs here

            Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>(DownloadProgress);
            if (start)
            {
                await download.StartAsync().AsTask(cts.Token, progressCallback);
            }
            else
            {
                await download.AttachAsync().AsTask(cts.Token, progressCallback);
            }
        }
        catch
        {
            throw;
        }
        finally
        {
            activeDownloads.Remove(download);
        }
    }

尝试将下载添加到 activeDownloads 时出现错误。大部分代码来自 This MSDN 示例,但我添加了 foreach 循环来下载多个项目。

您似乎忘记了在 StartDownload 方法中初始化活动下载列表,例如:

activeDownloads = new List<DownloadOperation>();