Другие ответы здесь указывают на то, почему вы видите свое поведение; а именно, что миллисекунды двух переменных DateTime различны.
Я бы порекомендовал вам сделать ваше состояние более гибким. Вы полагаетесь на тот факт, что ваш метод NeedsTurningOn
будет выполняться в течение именно той секунды, которую вы настроили в настройке времени включения. Что если система зависнет на секунду? Ваш код может периодически пропустить окно для включения. Что если вы решите изменить интервал таймера с 1000 до 5000? В этом случае ваш код будет иметь только около 1/5 шанса выполнения в течение правильной секунды.
Я бы предложил сделать ваше состояние примерно таким:
if (this.IsTurnedOn)
{
Console.WriteLine("false - already on");
return false;
}
else
{
DateTime date = Convert.ToDateTime(turnon.SystemSettingValue);
Console.WriteLine("Turnontime: " + date);
Console.WriteLine("currenttim: " + DateTime.Now);
if (date > DateTime.Now)
{
Console.WriteLine("false");
return false;
}
else
{
Console.WriteLine("true");
return true;
}
}
По сути, добавьте свойство IsTurnedOn
в свой класс TVMonitor, чтобы действовать как флаг, чтобы вы знали, действительно ли вам нужно его включить. Кроме того, измените date != DateTime.Now
на date > DateTime.Now
, потому что я предполагаю, что вы действительно пытаетесь определить, что настроенное время включения истекло.