中的日期
我想在特定时间执行事件
我添加了一个以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");
}