使用任务自动刷新

时间:2015-01-22 12:41:09

标签: c# charts .net-4.0 task-parallel-library

我有一个winforms应用程序,图表组件工作得很好,现在我需要实现自动刷新机制,因此图表将在用户在运行时设置的时间范围内连续更新(30 segs,1 min ,...)。 我正在搜索如何使用Task来获取此信息,但我注意到任务没有计时器。

那么,你有没有做过类似的事情?听起来最好的方法是什么?主题? BackgroundWorker的?

我的项目是.NET 4.0,我无法对其进行修改。

2 个答案:

答案 0 :(得分:0)

您需要自己编写,基于Task.Delay(内部使用System.Threading.Timer)创建在一定时间后完成的任务:

async Task AutoRefresh(TimeSpan interval, CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        RefreshChart();
        await Task.Delay(interval);
    }
}

您可以在启动时使用特定时间间隔调用它,并使用CancellationToken发出信号以指示何时应该停止。这将返回您最后await的任务,以确保您没有任何未处理的例外:

// start
var interval = GetIntervalFromUser();
_cts = new CancellationTokenSource();
_autoRefreshTask = AutoRefresh(interval, cts.Token);

// end
_cts.Cancel();
try
{
    await _autoRefreshTask;
}
catch (Exception e)
{
    // handle exception
}

您可以使用Microsoft.Bcl.Async nuget

在.Net 4.0中使用async-await

答案 1 :(得分:-1)

在WPF中我们有DispatchTimers,但遗憾的是我不认为你可以在WinForms中使用它们。您可以使用System.Threading.Timer(可以在GUI线程之外使用)做一些聪明的事情,并在准备好更新它时对GUI线程进行某种调用。这会是你需要做的事吗?