2013-07-17 5 views
1

Я написал простую функцию для загрузки файла из SkyDrive в IsolatedStorage.Почему LiveConnectClient.BackgroundDownloadAsync терпит неудачу, если вы пытаетесь «подождать»?

public static async Task<T> DownloadFileData<T>(string fileID, string filename) 
     { 
     var liveClient = new LiveConnectClient(Session); 

     // Download the file 
     await liveClient.BackgroundDownloadAsync(fileID + "/Content", new Uri("/shared/transfers/" + filename, UriKind.Relative)); 

     // Get a reference to the Local Folder 
     string root = ApplicationData.Current.LocalFolder.Path; 
     var storageFolder = await StorageFolder.GetFolderFromPathAsync(root + @"\shared\transfers"); 

     // Read the file 
     var FileData = await StorageHelper.ReadFileAsync<T>(storageFolder, filename); 
     return FileData; 
     } 

Функция терпит неудачу работает линия:

// Download the file 
await liveClient.BackgroundDownloadAsync(fileID + "/Content", new Uri("/shared/transfers/" + filename, UriKind.Relative)); 

с ошибкой: «Исключение типа„System.InvalidOperationException“произошло в mscorlib.ni.dll, но не был обработан в пользовательском коде

запрос уже представлен»

функции завершается успешно, если я изменить строку (удаление ОЖИДАНИЯ):

// Download the file 
liveClient.BackgroundDownloadAsync(fileID + "/Content", new Uri("/shared/transfers/" + filename, UriKind.Relative)); 

Почему это?

Thx

+3

Что значит «не удается»? Это тупик? Есть ли исключение? –

+0

Ошибка, которую я получаю: «Исключение типа« System.InvalidOperationException »произошло в mscorlib.ni.dll, но не было обработано в коде пользователя Запрос уже отправлен« –

+1

». Ваш код отправляет этот запрос больше, чем один раз? –

ответ

1

Существует необходимость проверить, если BackgroundTransferService.Request пуст, и если не удалить любой отложенный запрос.

Я изменил мой код, как это, и это, кажется, работает нормально:

public static async Task<T> DownloadFileData<T>(string skydriveFileId, string isolatedStorageFileName) 
    { 
    var liveClient = new LiveConnectClient(Session); 

    // Prepare for download, make sure there are no previous requests 
    var reqList = BackgroundTransferService.Requests.ToList(); 
    foreach (var req in reqList) 
     { 
     if (req.DownloadLocation.Equals(new Uri(@"\shared\transfers\" + isolatedStorageFileName, UriKind.Relative))) 
      { 
      BackgroundTransferService.Remove(BackgroundTransferService.Find(req.RequestId)); 
      } 
     } 

    // Download the file into IsolatedStorage file named @"\shared\transfers\isolatedStorageFileName" 
    try 
     { 
     await liveClient.BackgroundDownloadAsync(skydriveFileId + "/Content", new Uri(@"\shared\transfers\" + isolatedStorageFileName, UriKind.Relative)); 
     } 
    catch (TaskCanceledException exception) 
     { 
     Debug.WriteLine("Download canceled: " + exception.Message); 
     } 

    // Get a reference to the Local Folder 
    var storageFolder = await GetSharedTransfersFolder<T>(); 

    // Read the file data 
    var fileData = await StorageHelper.ReadFileAsync<T>(storageFolder, isolatedStorageFileName); 
    return fileData; 
    } 
Смежные вопросы