Как скачать файлы с помощью UWP в C #

Я новичок в программировании, и мне было интересно, как правильно загружать файлы в UWP. Я сейчас использую это, но это работает только в 50% случаев:

public async Task StartDownload()
{
    try
    {
        StorageFile sf = await DownloadsFolder.CreateFileAsync(title.Text, CreationCollisionOption.GenerateUniqueName);
        downloadFolder = (await sf.GetParentAsync()).ToString();
        HttpClient client = new HttpClient();
        byte[] buffer = await client.GetByteArrayAsync(inputURL);
        using (Stream stream = await sf.OpenStreamForWriteAsync())
        {
            stream.Write(buffer, 0, buffer.Length);
        }
        path = sf.Path;
    }
    catch (Exception e)
    {
        MessageDialog dialog = new MessageDialog("Sorry, something went wrong...", "An error...");
        await dialog.ShowAsync();
    }
}

Исключение: «Необработанное исключение в 0x750F6D7E (combase.dll в program.exe 0xC000027B; Возникла внутренняя исключительная ситуация приложения (параметры: 0x16E73128, 0x00000001)».

заранее спасибо

 Jcl14 июн. 2016 г., 09:59
Что за исключение в других 50% случаев, когда оно не работает?
 dynamichael16 февр. 2018 г., 03:25
Это исключение из 50% случаев, когда оно не работает. 50% времени, когда оно работает, не будет исключением.

Ответы на вопрос(1)

Решение Вопроса


Во-первых, вы должны использовать HttpClient (это хорошо работает с небольшими файлами).

Второй заключается в использованииКласс BackgroundDownloader, Это рекомендуемый способ

 private async void StartDownload_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            Uri source = new Uri(inputURL);

            StorageFile destinationFile = await KnownFolders.PicturesLibrary.CreateFileAsync(
                title.Text, CreationCollisionOption.GenerateUniqueName);

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

            // Attach progress and completion handlers.
            HandleDownloadAsync(download, true);
        }
        catch (Exception ex)
        {
            LogException("Download Error", ex);
        }
    }

Ваш ответ на вопрос