在特定时间运行方法

时间:2017-03-12 13:32:49

标签: c# windows-services

我将有一个预定日期时间字典。如果Dictonary中的任何Datetime等于当前时间,我需要调用一个方法。请告诉我为实现这一目标需要做些什么。我不希望它每天都运行。只有一次。

我将拥有包含许多记录的词典,以便查看以下数据:

Dictionary<DateTime,int> dic = new Dictionary<DateTime,int>();

Values:
10-03-2017 07:30:01 PM,1
10-03-2017 07:34:01 PM,2
10-03-2017 07:37:05 PM,3
10-03-2017 07:39:55 PM,4

这是一个值的样本,我将在100左右这样。当时间到达当前时间我需要以下面的格式调用方法传递字典值。在方法内部,我将进行处理。

ProcessValue(int val)
{

}

1 个答案:

答案 0 :(得分:1)

我不认为这是最好的解决方案,但如果不了解您的情况,我无法提供更好的选择。

正如您所知,字典不能包含重复的键值,这听起来像是您需要的。我已经从DateTime字典中更改了它 - &gt; int,to DateTime - &gt;因此列出。

为了按秒查找项目,我实现了一个自定义相等比较器,它将使用ticks生成一个唯一的hashcode,并执行相等的比较,直至秒:

Dictionary<DateTime, List<int>> dic = new Dictionary<DateTime, List<int>>(DateSecondEqualityComparer.Instance());

private void timer1_Tick(object sender, EventArgs e)
{
    List<int> values;
    DateTime currentTime = DateTime.Now;
    if (dic.TryGetValue(currentTime, out values))
    {
        foreach (var value in values)
        {
            ProcessValue(value);
        }
        // If you want to remove the date from the dictionary, uncomment the line below
        // dic.Remove(currentTime);
    }
}

private void ProcessValue(int val)
{

}

public class DateSecondEqualityComparer : IEqualityComparer<DateTime>
{
    public static DateSecondEqualityComparer Instance()
    {
        return new DateSecondEqualityComparer();
    }

    public bool Equals(DateTime x, DateTime y)
    {
        return x.Date == y.Date && x.Hour == y.Hour && x.Minute == y.Minute && x.Second == y.Second;
    }

    public int GetHashCode(DateTime obj)
    {
        // ticks -> seconds
        var seconds = (obj.Ticks / 10000000);
        return seconds.GetHashCode();
    }
}