Я пишу программу C # WinForms, которую хочу, чтобы она работала в фоновом режиме 24/7. В файле XML я тяну время. Например: 15:30:00. Когда я затем показываю это время после его анализа, получается 15 января 2014 г., 15:30:00.

Какой у меня вопрос, основываясь на этом значении XML, как я могу получить его, чтобы каждый день в 15:30:00 объект Timer или что-то отображало окно сообщения или какое-либо другое действие?

0
user3215251 15 Май 2014 в 22:26

2 ответа

Лучший ответ

Ваша идея использования Timer хороша. Вы можете использовать либо Winforms Timer, либо System.Timers.Timer. В этом случае я буду ссылаться на System.Timers.Timer, поскольку у меня есть код, на котором я могу основывать свой ответ.

В любом случае, просто назначьте ему Interval и дайте событию сработать через Elapsed. Затем в коде, который вызывает Elapsed, введите свой код действия. Наконец, запустите таймер там, где он вам нужен, и попробуйте запустить его.

Если вы используете DateTime для хранения данных файла, вам нужно будет либо создать постоянное количество миллисекунд до следующего дня (не рекомендуется), либо выполнить некоторые математические вычисления, используя TimeSpan (подсказка : используйте конструктор, чтобы узнать время). TimeSpan содержит свойство TotalMilliseconds, которое вы можете использовать как Interval.

Я надеюсь, что это указывает вам в правильном направлении.

2
Brandon 15 Май 2014 в 18:59

Это консольное приложение, которое ежедневно выполняет задание в фиксированное время.

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main()
        {
            Timer t = new Timer(TimerCallback, null, 0, 2000);
            // Wait for the user to hit <Enter>
            Console.ReadLine();
        }

        private static void TimerCallback(Object o)
        {
            Console.WriteLine("In TimerCallback: " + DateTime.Now);
            DateTime s = DateTime.Now;
            TimeSpan ts = new TimeSpan(23, 27, 0);
            s = s.Date + ts;
            if (DateTime.Now > s && !fired) 
            { 
                Console.WriteLine("Do the Job");
                fired = true;
            }
            else if (DateTime.Now < s)
            {
                fired = false;
            }
        }
        private static bool fired = false;
    }
}
1
keiv.fly 15 Май 2014 в 19:32