Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Загрузка и выгрузка данных Windows Runtime

0

При    разработке   приложений,    которые    взаимодействуют с    удаленным сервисом, сценарии   загрузки   контента  в    приложение   или   его  выгрузки из   приложения   являются  очень    распространенными.   Metro-приложения не  являются исключением,   так  что  Windows  8  предоставляет более  чем достаточное количество механизмов загрузки и выгрузки данных приложения. Для  решения этой задачи мы можем использовать давно известные  классы

.N     et Framework или их аналоги: класс HttpClient (аналог класса  WebClient) и  классы HttpWebRequest/HttpWebResponse. Они  отлично работают, когда пользователь работает с нашим  приложением, то есть приложение находится в  активном состоянии.  Но что делать, если необходимо осуществлять обмен большими объемами данных? Не заставлять же пользователя постоянно держать приложения  открытыми!  В  этом  случае  мы  можем  использовать  механизм фоновой выгрузки контента  на  удаленный  сервер и  загрузки  с  него.  Для решения задач такого рода следует  использовать типы Windows.Networking. BackgroundTransfer.BackgroundDownloader (для фоновой загрузки  контента

в  приложение) и  Windows.Networking.BackgroundTransfer.BackgroundUploader

(для фоновой выгрузки контента на сервер).

Пример кода, выполняющего фоновую загрузку контента, приведен ниже:

DownloadOperation download = null; try

{

Uri source = new Uri(serverAddressFile);

StorageFile destinationFile = await KnownFolders. PicturesLibrary.CreateFileAsync("Image.jpg", CreationCollisionOption.GenerateUniqueName);

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

// Прикрепляем прогресс

HandleDownloadAsync(download, true);

}

catch (Exception ex)

{

. . .

}

. . . . . . . . .

private List<DownloadOperation> activeDownloads;

private async void HandleDownloadAsync(DownloadOperation download, bool start)

{

try

{

activeDownloads.Add(download); // Сохраняем загрузку –

это позволит нам приостановить или возобновить ее.

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 (TaskCanceledException)

{

. . . . .

}

catch (Exception ex)

{

. . . . .

}

finally

{

activeDownloads.Remove(download);

}

}

Вся  информация  о  текущей  загрузке  контента  находится  в   объекте  типа DownloadOperation. Через этот объект мы можем управлять процессом загрузки файла. А именно, приостанавливать и восстанавливать его, привязываться к уже существующей загрузке,  получать информацию о ходе выполнения операции и др. Для создания этого объекта необходимо вызвать метод CreateDownload класса  BackgroundDownloader.  В  метод  предаются  два   параметра:   адрес загружаемого контента  (переменная source  в  примере)  и  файл,  в   котором будет сохраняться контент (переменная  destinationFile в   примере). Вызывая метод StartAsync, мы запускаем процесс загрузки контента. Метод AttachAsync позволяет связать  существующий процесс загрузки с обработчиком. А метод расширения AsTask позволяет указать обработчик прогресса загрузки данных.

Для     работы     рассмотренного    выше    примера     необходимо     указать соответствующие возможности в манифесте проекта (Рис. 7.3).

Рис. 7.3.

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

  • Комментарии