gpt4 book ai didi

c# - 如何在构造函数中使用定时器?

转载 作者:行者123 更新时间:2023-11-30 18:22:15 26 4
gpt4 key购买 nike

我的类中有一个公共(public)方法,它将 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) {...}
}

更新:如果你想知道在间隔中获取数据后如何使用它们,我建议你实现并使用 observer pattern ,即:注册所有对这些数据感兴趣的对象,然后在每个时间间隔通知 - 将所有数据分派(dispatch)给它们。

关于c# - 如何在构造函数中使用定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34226724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com