Завантаження та вивантаження даних Windows Runtime

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

. N et Framework або їх аналоги: клас HttpClient (Аналог класуWebClient) І класи HttpWebRequest/HttpWebResponse Вони відмінно працюють, коли користувач працює з нашим додатком, тобто додаток знаходиться в активному стані Але що робити, якщо необхідно здійснювати обмін великими обсягами даних Не змушувати ж користувача постійно тримати додатки відкритими У цьому випадку ми можемо використовувати механізм фонової вивантаження контенту на віддалений сервер і завантаження з нього Для вирішення задач такого роду слід використовувати типи WindowsNetworking BackgroundTransferBackgroundDownloader (Для фонової завантаження контенту

в додаток) іWindowsNetworkingBackgroundTransferBackgroundUploader

(Для фонової вивантаження контенту на сервер)

Приклад коду, що виконує фонову завантаження контенту, наведено нижче:

DownloadOperation download = null try

{

Uri source = new Uri(serverAddressFile)

StorageFile destinationFile = await KnownFolders PicturesLibraryCreateFileAsync(&quotImagejpg&quot, CreationCollisionOptionGenerateUniqueName)

BackgroundDownloader downloader = new BackgroundDownloader() download = downloaderCreateDownload(source, destinationFile)

/ / Прикріплюємо прогрес

HandleDownloadAsync(download, true)

}

catch (Exception ex)

{

.

}

.

private List&ltDownloadOperation&gt activeDownloads

private async void HandleDownloadAsync(DownloadOperation download, bool start)

{

try

{

activeDownloadsAdd (download) / / Зберігаємо завантаження –

це дозволить нам призупинити або відновити її

Progress&ltDownloadOperation&gt progressCallback = new Progress&ltDownloadOperation&gt(DownloadProgress)

if (start)

{

/ / Запускаємо завантаження і привязуємо обробник

await downloadStartAsync()AsTask(ctsToken, progressCallback)

} else

{

/ / У разі, якщо завантаження вже знаходиться в активному стані, тільки привязуємо обробник

await downloadAttachAsync()AsTask(ctsToken, progressCallback)

}

}

catch (TaskCanceledException)

{

.

}

catch (Exception ex)

{

.

}

finally

{

activeDownloadsRemove(download)

}

}

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

Для роботи розглянутого вище прикладу необхідно вказати відповідні можливості в маніфесті проекту (Мал 73)

Рис 73

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*