1

DBからいくつかのデータをロードする必要がありますが、すべてをロードする必要があるため、Windows画面(Windowsフォーム)がフリーズしているので、次のコードで試してみます。

var data = Task.Factory.StartNew(() =>
            {
                repository = ObjectFactory.GetInstance<ILibriRepository>();
                librat = repository.GetAll().ToList();//

            });
data.ContinueWith((a) =>
{
    librat.ForEach(c => lvLista.Items.Add(new LibraListViewItem(c)));
}, CancellationToken.None, TaskContinuationOptions.None, uiScheduler);

しかし、これでもデータがロードされ、ListViewでレンダリングする必要がある場合、画面がフリーズします。

4

1 に答える 1

0

クエリの実行中はおそらく20秒の遅延は発生していませんが、すべてのアイテムをリストビューに追加した結果です(これはUIスレッドで発生する必要があります)。

これが役立つかもしれないいくつかのことです:

ContinueWithで、ListView.BeginUpdate()ループを開始する前に呼び出し、ListView.EndUpdate()終了したら呼び出します。

これにより、リストに追加するすべてのアイテムに対してリストが再描画されなくなります。

于 2013-03-09T01:27:32.540 に答える