我的类中有一个公共方法,它以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);
}
答案 0 :(得分:0)
您可以将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) {...}
}
更新:如果您想知道如何在间隔中获取数据后使用数据,我建议您实现并使用observer pattern,即:注册对这些数据感兴趣的所有对象,然后通知 - 将所有数据发送到他们,每个时间间隔。