我需要不断地轮询数据存储以获取可能的更新。我正在使用以下代码实现这一点。顺便说一下,这是一个 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 吗?
编辑:
好的,在 Jon 和 Henk 的建议下,我改用了 Timer:
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);
}