基本上我正在尝试为项目编写闹钟(未评分)。出于某种原因,我的DateTime比较器会立即从-1跳到1,即使这些值应该相等。
这是因为它发生得太快还是因为我没有使用毫秒?
以下是我认为问题所在的代码片段(如果尚未设置,则alarmDate为null):
private void Timer_Tick(object sender, EventArgs e)
{
lblTime.Content = DateTime.Now.ToLongTimeString();
if(alarmDate != null)
{
int result = DateTime.Compare(DateTime.Now, (DateTime)alarmDate.Value);
lblTest.Content = alarmDate.Value.ToLongTimeString();
lblTest2.Content = DateTime.Now.ToLongTimeString();
if(result == 0)
{
lblWakeUp.Content = "Wake Up!!!!";
SystemSounds.Beep.Play();
}
}
}
对不起,如果这是一个愚蠢的问题或错误,但我真的找不到答案。
提前致谢!
答案 0 :(得分:4)
DateTime
实际上具有大约16毫秒的精度,因此您有一个非常的短窗口,其中两个DateTime
将完全相等,并且您获得的DateTime
值很可能永远等于特定值。我建议使用一个超过闹钟时间后触发的标志:
bool alarmTriggered = false; // <-- new flag
private void Timer_Tick(object sender, EventArgs e)
{
lblTime.Content = DateTime.Now.ToLongTimeString();
if(alarmDate != null)
{
int result = DateTime.Compare(DateTime.Now, (DateTime)alarmDate.Value);
lblTest.Content = alarmDate.Value.ToLongTimeString();
lblTest2.Content = DateTime.Now.ToLongTimeString();
if(result > 0 && !alarmTriggered) // <-- check flag
{
alarmTriggered = true; // <-- set the flag
lblWakeUp.Content = "Wake Up!!!!";
SystemSounds.Beep.Play();
}
}
}