switch (tmnmru) { case "DAY": if (targetHourOfDay != nowHour) { //Разница между часами int waitDay = (nowDayOfWeek < targetDayOfWeek) ? targetDayOfWeek - nowDayOfWeek : (7 - nowDayOfWeek) + targetDayOfWeek; int waithour = (nowHour < targetHourOfDay) ? targetHourOfDay - nowHour : (24 - nowHour) + targetHourOfDay; int waitMinute = (nowMinute < targetMinuteOfHour) ? targetMinuteOfHour - nowMinute : (60 - nowMinute) + targetMinuteOfHour; Console.WriteLine(dbStr); DateTime startTime = DateTime.Now.Date.AddDays(waitDay).AddHours(waithour).AddMinutes(waitMinute); Console.WriteLine("Таймер должен запуститься в : {0} ", startTime.ToString()); // Узнаем разницу в миллисекундах, оставшуюся до запуска double waitTime_ms = (startTime - DateTime.Now).TotalMilliseconds; Console.WriteLine("До запуска осталось: {0} мc.", waitTime_ms); MyTimer myTimer = new MyTimer(); myTimer.Interval = waitTime_ms; myTimer.s_id = Convert.ToString(row["shedule_id"]); myTimer.alg = Convert.ToString(row["meta_cod"]); myTimer.Elapsed += OnTimeout; myTimer.AutoReset = true; myTimer.datetime = Convert.ToDateTime(startTime); myTimer.Enabled = true; } break; case "HOUR": if ((targetMinuteOfHour != nowMinute) || (DateTime.Now > DateTime.Parse(dbStr.Substring(3)))) { //Посчитаем разницу между минутами int waitMinute = (nowMinute < targetMinuteOfHour) ? targetMinuteOfHour - nowMinute : (60 - nowMinute) + targetMinuteOfHour; int waitDay = (nowDayOfWeek < targetDayOfWeek) ? targetDayOfWeek - nowDayOfWeek : (7 - nowDayOfWeek) + targetDayOfWeek; int waithour = (nowHour < targetHourOfDay) ? targetHourOfDay - nowHour : (24 - nowHour) + targetHourOfDay; Console.WriteLine(dbStr + " " + "Minute"); DateTime startTime = DateTime.Now.Date.AddDays(waitDay).AddHours(waithour).AddMinutes(waitMinute); Console.WriteLine("Таймер должен запуститься в : {0} ", startTime.ToString()); // Узнаем разницу в миллисекундах, оставшуюся до запуска double waitTime_ms = (startTime - DateTime.Now).TotalMilliseconds; Console.WriteLine("До запуска осталось: {0} мc.", waitTime_ms); MyTimer myTimer = new MyTimer(); myTimer.Interval = waitTime_ms; myTimer.s_id = Convert.ToString(row["shedule_id"]); myTimer.alg = Convert.ToString(row["meta_cod"]); myTimer.Elapsed += OnTimeout; myTimer.AutoReset = true; myTimer.datetime = Convert.ToDateTime(startTime); myTimer.Enabled = true; } break; case "WEEK": if ((targetDayOfWeek != nowDayOfWeek) || (DateTime.Now > DateTime.Parse(dbStr.Substring(2)))) { //DateTime dtDayandHour = Convert.ToDateTime(splitStr); // double DayandHour = Convert.ToDouble(dtDayandHour); // Console.WriteLine("интервал: {0}", DayandHour); // Посчитаем разницу между днями int waithour = (nowHour < targetHourOfDay) ? targetHourOfDay - nowHour : (24 - nowHour) + targetHourOfDay; Console.WriteLine(waithour); int waitDay = (nowDayOfWeek < targetDayOfWeek) ? targetDayOfWeek - nowDayOfWeek : (7 - nowDayOfWeek) + targetDayOfWeek; Console.WriteLine(dbStr + " " + "Day and hour"); // Вычислим время запуска DateTime startTime = DateTime.Now.Date.AddDays(waitDay).AddHours(targetHourOfDay); Console.WriteLine("Таймер должен запуститься в : {0} ", startTime.ToString()); // Узнаем разницу в миллисекундах, оставшуюся до запуска double waitTime_ms = (startTime - DateTime.Now).TotalMilliseconds; Console.WriteLine("До запуска осталось: {0} мс.", waitTime_ms); MyTimer myTimer = new MyTimer(); myTimer.Interval = waitTime_ms; myTimer.s_id = Convert.ToString(row["shedule_id"]); myTimer.alg = Convert.ToString(row["meta_cod"]); myTimer.Elapsed += OnTimeout; myTimer.AutoReset = true; myTimer.datetime = Convert.ToDateTime(startTime); myTimer.Enabled = true; } break; 

There is a timer that writes data to a table. There are 3 types of timer: the first timer runs every week, the second runs every day, the third runs every hour?

  • // Find out the difference in milliseconds, remaining before the start double waitTime_ms = (startTime - DateTime.Now) .TotalMinutes; Isn't the interval in milliseconds? And you take that minute, then second. Not a single hit. - Monk
  • it all worked) you just need TotalMinutes - propro17
  • @Monk How can I make a timer interval every hour if in CASE = DAY ? - propro17
  • @Monk my timer starts every week. And I need to make sure that I turn on the timer, and then it ticks every hour - propro17
  • somewhere you have become too smart, but I do not understand what you are trying to achieve. Timers that start timers are suspicious behavior. - Monk

0