当当前时间等于设置值时执行事件



我想在特定时间执行事件

我添加了一个以800毫秒的计时器,在计时器事件中,我在设定值和当前时间之间进行了比较但是问题在于,事件发生的时间超过了时间,正如照片中所示的那样,由于代码,消息框必须发生1次,但是当我执行它时发生了7次或更多次代码是:

private void timer2_Tick(object sender, EventArgs e)
{
    DateTime date1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt16(Properties.Settings.Default.shift_1_end_hh), Convert.ToInt16(Properties.Settings.Default.shift_1_end_min), 0);
    DateTime date2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
    int result = DateTime.Compare(date1, date2);
    if (result == 0)
    {
        MessageBox.Show("tttt");
    }
}

https://i.stack.imgur.com/miyfk.png

这是您代码的更好版本:

private void timer2_Tick(object sender, EventArgs e)
{
    var hours = Convert.ToInt16(Properties.Settings.Default.shift_1_end_hh);
    var minutes = Convert.ToInt16(Properties.Settings.Default.shift_1_end_min);
    var date1 = DateTime.Today.AddHours(hours).AddMinutes(minutes);
    int result = DateTime.Compare(date1,DateTime.Now);
    if (result == 0)
    { 
         timer2.Enabled = false;
         MessageBox.Show("tttt"); 
    }
}

兴趣点:

  • 简化了date1的创建
  • 删除了date2,只需使用DateTime.Now而代替
  • 满足条件后禁用计时器。

在这里您可以找到更好的解决方案[如何比较C#

中的日期

尝试此

 if (result == 0)
{ 
     if (timer2.IsEnabled)
     {
        timer2.Stop();
     }
     MessageBox.Show("tttt"); 
}

相关内容

  • 没有找到相关文章

最新更新