3

ユーザーがアプリケーションを引き続き使用できるように、タスクを使用して別のスレッドでデータをフェッチしています。私が見つけた問題は、グリッドへのデータの実際のバインドにも数秒かかることです。FetchData()呼び出しと同じスレッドでデータをバインドするにはどうすればよいですか?

Task<List<SomeData>> getData = new Task<List<SomeData>>(() =>
{
    List<SomeData> myData = FetchData(); // Expensive!
    return myData;
});

getData.Start();

Task processData = getData.ContinueWith(data =>
{
    grid.DataSource = data; // Takes a few second so now the UI thread is disrupted
}, TaskScheduler.FromCurrentSynchronizationContext()); // UI thread :(
4

1 に答える 1

1

を使用するのはBackgroundWorkerどうですか?ツールボックスから backgroundworker をフォームにプルし、BackgroundWorker の RunWorkerAsync 呼び出しでプロセスを開始するだけです。

イベントでは、DoWorkデータのフェッチを行います。

イベントで、RunWorkerCompleted結果をグリッドにバインドします。

于 2012-06-21T07:14:24.263 に答える