1

更新の可能性について、データ ストアを常にポーリングする必要があります。次のコードを使用してこれを達成しています。ちなみに、これはWindowsフォームアプリケーションです。

var uiContext = TaskScheduler.FromCurrentSynchronizationContext();

var updateTask = Task.Factory.StartNew(() =>
{
    while (true)
    {
        Thread.Sleep(5000);

        Task.Factory.StartNew(() =>
        {
            someData = dataStore.GetData();
        }).ContinueWith(t =>
        {
            someGrid.DataSource = someData;
        }, uiContext);
    }
});

someDataプライベート クラス フィールドでsomeGridあり、データグリッド コントロールです。

これは完全に機能しているように見えますが、それを達成するためのより良い方法があるかどうか疑問に思っていました. また、私の外側のタスクは LongRunning である必要がありますか?

編集:

わかりました、ジョンとヘンクの提案で、代わりにタイマーを使用しています:

uiContext = TaskScheduler.FromCurrentSynchronizationContext();

updateTimer = new System.Timers.Timer(5000);
updateTimer.Elapsed += updateTimer_Elapsed;
updateTimer.Enabled = true;

経過イベント:

void updateTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    someData = dataStore.GetData();

    Task.Factory.StartNew(() =>
    {
        someGrid.DataSource = someData;
    }, uiContext);
}
4

1 に答える 1