如何在构造函数中使用Timer?

时间:2015-12-11 15:16:25

标签: c# timer

我的类中有一个公共方法,它以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);
}

1 个答案:

答案 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,即:注册对这些数据感兴趣的所有对象,然后通知 - 将所有数据发送到他们,每个时间间隔。