Я следую руководству MSDN о скачивание файла. Поэтому я сделал очень простую загрузку:
private async void performDownload_Click(object sender, RoutedEventArgs e)
{
CancellationTokenSource myCts = new CancellationTokenSource();
ulong bytesReceived = await DownloadWebFile("myFile.jpg", myCts.Token);
var forBreakpoint = 5; // set breakpoint here - isn't being hit on a device
// some further code
}
public async Task<ulong> DownloadWebFile(string fileName, CancellationToken ct)
{
Uri requestUri = new Uri("http://photojournal.jpl.nasa.gov/jpeg/PIA17555.jpg");
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
BackgroundDownloader downloader = new BackgroundDownloader();
downloader.Method = "GET";
downloader.CostPolicy = BackgroundTransferCostPolicy.Always;
DownloadOperation operation = downloader.CreateDownload(requestUri, file);
operation.Priority = BackgroundTransferPriority.High;
await operation.StartAsync().AsTask(ct);
ulong bytes = operation.Progress.BytesReceived;
return bytes; // set breakpoint here - it is being hit
} // here App hangs (only on Device, on emulator works)
Странная ситуация, что на Эмуляторе все работает, а на Девайсе (Lumia 820) код зависает каждый раз при отладке. Если вы установите точку останова на последней строке DownloadWebFile
- return bytes
, она срабатывает, показывает правильное количество байтов, вы можете сделать шаг вперед, но только до скобки. При попытке продвинуться дальше приложение зависает (без точек останова тоже зависает). Файл, как я его вижу через IsolatedStorageExplorer, загружается корректно.
Похоже, что иногда программа зависает во время отладки при попытке выйти из асинхронного метода (спасибо, @yasen)