0

以下のスニペットは、c# および xaml の Windows 8 ストア アプリからのものです。このコードは Web 上のさまざまなサンプルからまとめたものであるため、これが最も適切な方法ではない可能性があります。そのほとんどは VS2012 で提供されている Grid テンプレートからのもので、データのソースとして Web API を接続しました

以下の説明をお願いします

Get メソッドを呼び出すと、すべて正常に動作し、xaml ビューにデータが返されます。同じメソッドで Take(10) のコメントを外すと、データが返されません。

LINQ のさまざまな拡張メソッドを配置しようとすると、返されるデータが停止するだけで、その理由も示されず、問題なく準拠しているようです。

どんな助けでも大歓迎

ありがとうマーク

public class TeamDataSource
{
    private static TeamDataSource _sampleDataSource = new TeamDataSource();

    private ObservableCollection<TeamDataItem> _items = new ObservableCollection<TeamDataItem>();
    public ObservableCollection<TeamDataItem> Items
    {
        get { return this._items; }
    }

    public TeamDataSource()
    {
        this.Initialize();
    }

    public static IEnumerable<TeamDataItem> Get()
    {
        var thisdata = _sampleDataSource.Items;
        return thisdata;//.Take(10);
    }

    private async void Initialize()
    {
        using (var client = new DataServiceClient())
        {
            List<TeamDataItem> list = await client.Download<List<TeamDataItem>>("/teams");

            foreach (var i in list.OrderByDescending(t => t.Points).ThenByDescending(t => t.GoalDiff))
            {
                TeamDataItem team = i;
                _items.Add(team);
            }
        }
    }
}
4

2 に答える 2

0

あなたの問題はTake、アイテムをすぐに列挙しないことです。foreachが呼び出されるか、呼び出されるまで、列挙を延期しますGetEnumerator。この場合、列挙しているコレクションは(Getコンテンツが終了するとすぐに)破棄されるため、最終的にアイテムを列挙すると、アイテムはもうありません。thisdata.GetEnumerator();return ステートメントの前に行として追加してみてください。

ここから:

このメソッドは、遅延実行を使用して実装されます。即時の戻り値は、アクションを実行するために必要なすべての情報を格納するオブジェクトです。このメソッドによって表されるクエリは、GetEnumerator メソッドを直接呼び出すか、Visual C# の foreach または Visual Basic の For Each を使用して、オブジェクトが列挙されるまで実行されません。

于 2012-10-28T05:09:33.370 に答える
0

最終的にはかなり明白だったようです。aync と await を使用していたため、データが到着する前に呼び出しがすぐに返されました。したがって、Take(4) が機能するものは何もありません。

唯一の問題は、タスクが完了したことをいつ確認できるかということです。

于 2012-10-29T21:59:24.450 に答える