0

我有以下代码,我试图从用户 SkyDrive 帐户下载 3 个不同的文件。

我正在使用 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 个其他类似的方法可以做完全相同的事情,只是它加载不同的对象(基于下载的文件)。

我目前收到的错误:

mscorlib.ni.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

    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();
        }
    }
4

1 回答 1

1

实际上应该调用所有三个方法。当然,如果第一个方法被调用并抛出异常,其他两个不会触发。

你可以做的是为每个调用创建一个新的客户端,或者按顺序下载它们,所以当OnDownloadCompletedVI方法完成时,删除事件处理程序OnDownloadCompletedVI并添加一个OnDownloadCompletedHI,然后client.DownloadAsync(fileIdHistoryItems);在方法的末尾触发。

于 2012-11-11T23:31:05.250 回答