如何在构造函数内部使用Timer
本文关键字:Timer 内部 构造函数 | 更新日期: 2023-09-27 18:26:23
我的类中有一个以DataCredentials
为参数的公共方法,我需要每分钟触发一次该方法
public Data GetData(DataCredentials dataCredentials) {...}
我知道我可以使用Timer
来解决当前的问题:
public class DataService : IDataService
{
private Timer _dataUpdateTimer;
private readonly TimeSpan _updateInterval = TimeSpan.FromMinutes(1);
public DataService()
{
_dataUpdateTimer = new Timer(GetData(?),
null,
TimeSpan.Zero,
_updateInterval);
}
public Data GetData(DataCredentials dataCredentials) {...}
}
但是我怎么知道DataCredentials
呢?
在此之前,我在其他类内部调用此方法,如下所示:
public Data GetCached(DataCredentials dataCredentials)
{
return _dataService.GetData(dataCredentials);
}
您可以获取GetData(....)
上所需的参数作为构造函数参数,并将其作为类中的字段。
然后,为计时器设置一个经过的回调,然后启动它(使用System.Timers.Timer
)。结束后,调用您的代码,然后重新启动计时器:
public class DataService : IDataService
{
private const double UpdateInterval = 1000; //1000ms = 1s
private readonly DataCredentials _credentials;
private Timer _dataUpdateTimer;
public DataService(DataCredentials credentials)
{
_credentials = credentials;
_dataUpdateTimer = new Timer(UpdateInterval);
_dataUpdateTimer.Elapsed += DataUpdateTimer_Elapsed;
_dataUpdateTimer.Start();
}
private void DataUpdateTimer_Elapsed(object sender, ElapsedEventArgs e)
{
//Call your code in here
var data = GetData(_credentials);
//.....
//Reset your timer
_dataUpdateTimer.Stop();
_dataUpdateTimer.Start();
}
public Data GetData(DataCredentials dataCredentials) {...}
}
更新:如果您想知道在间隔中获取数据后如何使用数据,我建议您实现并使用观察者模式,即:注册对这些数据感兴趣的所有对象,然后通知在每个间隔将所有数据发送给它们。