为什么ShellTile.ActiveTiles.Count()会立即在后续调用中返回不同的结果?

时间:2011-12-09 21:54:46

标签: windows-phone-7 windows-phone-7.1

请考虑以下事项:

        IEnumerable<ShellTile> pinnedtiles = ShellTile.ActiveTiles;
        Console.WriteLine(pinnedtiles.Count());
        Console.WriteLine(pinnedtiles.Count());

假设您有超过0个ActiveTiles,第一次调用Count()将返回正确的值,但第二次调用将返回0.

如果你没有将ShellTile.ActiveTiles设置为局部变量,它可以正常工作。我假设这是因为ActiveTiles实际上是内部类ShellTileEnumerator的一个实例,并且出于某种原因,当通过IEnumerable接口访问时,它就像一个仅向前的枚举器。好像很可能是'陷阱',还是我误解了什么?

1 个答案:

答案 0 :(得分:1)

是的,你是对的

  MessageBox.Show(ShellTile.ActiveTiles.Count().ToString());
  MessageBox.Show(ShellTile.ActiveTiles.Count().ToString());

上面的那个可以工作,但是当你分配给IEnumeable时不会....:)

另一种简单的方法是将其分配给List而不是IEnumerable。这也有效

 List<ShellTile> pinnedtiles = ShellTile.ActiveTiles.ToList(); ;
 MessageBox.Show(pinnedtiles.Count().ToString());
 MessageBox.Show(pinnedtiles.Count().ToString());