Загрузка нескольких файлов с использованием SkyDrive API

У меня есть следующий код, где я пытаюсь загрузить 3 разных файла из учетной записи SkyDrive пользователей.

Я использую SkyDrive API для разработки Windows Phone.

client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(OnDownloadCompletedVI);
client.DownloadAsync(fileIdVehicleItems);


client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(OnDownloadCompletedHI);
client.DownloadAsync(fileIdHistoryItems);


client.DownloadCompleted += new EventHandler<LiveDownloadCompletedEventArgs>(OnDownloadCompletedRI);
client.DownloadAsync(fileIdRepairItems);

Когда я запускаю это, единственный вызываемый метод это OnDownloadCompletedVI. Все загружаемые файлы выполняются с помощью этого метода, что вызывает ошибку.

Что я делаю неправильно?

Обновить

У меня есть следующий метод, но у меня есть 2 других аналогичных метода, которые делают то же самое, за исключением того, что он загружает разные объекты (на основе загруженных файлов).

Ошибка, которую я сейчас получаю:

Исключение типа "System.ArgumentException" произошло в mscorlib.ni.dll, но не было обработано в коде пользователя

    void OnDownloadCompletedVI(object sender, LiveDownloadCompletedEventArgs e)
    {
        if (e.Result != null)
        {
            using (var stream_vi = e.Result)
            {
                StreamReader SRVI = new StreamReader(stream_vi);
                string contentVI = "";
                contentVI = SRVI.ReadToEnd();

                StringReader rdr_vi = new StringReader(contentVI);

                XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<vehicle>));

                ObservableCollection<vehicle> importedVehicles = new ObservableCollection<vehicle>();
                importedVehicles = (ObservableCollection<vehicle>)serializer.Deserialize(rdr_vi);

                StorageHelper.Save<ObservableCollection<vehicle>>(App.vehicleData, importedVehicles);
            }
            //e.Result.Close();
        }
        else
        {
            infoTextBlock.Text = "Error downloading file: " + e.Error.ToString();
        }
    }

1 ответ

Решение

На самом деле все три метода должны быть вызваны. Конечно, если первый метод вызывается и выдает исключение, два других не сработают.

Что вы можете сделать, это либо создать новый клиент для каждого вызова, либо загрузить их по порядку, поэтому, когда OnDownloadCompletedVI метод завершен, удалите обработчик события для OnDownloadCompletedVI и добавить один для OnDownloadCompletedHI а затем вызвать client.DownloadAsync(fileIdHistoryItems); в конце метода.

Другие вопросы по тегам