1

我正在使用以下代码从我的 url 中获取一个 json 列表:

  List<Item> songList = new List<Item>();

  var w = new SharpGIS.GZipWebClient();

  Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
    .Subscribe(r =>
    {
        var deserialized = JsonConvert.DeserializeObject<Phone>(r.EventArgs.Result);
                  songList = deserialized.songs.items;

     });
  w.DownloadStringAsync(new Uri("http://myURL.com/"));

  List<ExtendedItem> extendedItemList = organizeBundleAndUri(songList);

在这里调试时我可以看到 deserialized.songs.items 列表有 11 个元素。

但是当谈到最后一行 songList 有 0 元素。为什么我不能将“deserialized.songs.items”对象值分配给 songList?

如果我如下使用它:

  SongList.ItemsSource = deserialized.songs.items;

我可以在我的主页上看到数据列表。

顺便说一句,这是我第一次编写 C#,我是一名 Java 开发人员。所以,如果这是一个蹩脚的问题,对不起。

4

1 回答 1

0

调用DownloadStringAsync是异步的,因此songList将在分配之前立即返回。在回调中下载歌曲列表后,您需要做所有您想做的事情(后面的代码块中的代码r =>)。如果这意味着你调用了一个方法,那也可以:

 List<Item> songList = new List<Item>();

 var w = new SharpGIS.GZipWebClient();

 Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
    .Subscribe(r =>
    {
        var deserialized = JsonConvert.DeserializeObject<Phone>(r.EventArgs.Result);
                  songList = deserialized.songs.items;

        List<ExtendedItem> extendedItemList = organizeBundleAndUri(songList);
        // DoSomethingElse(extendedItemList);
    });
 w.DownloadStringAsync(new Uri("http://myURL.com/"));
于 2013-09-09T12:15:11.647 回答