Как создать предупреждение в определенное время в C #?

Как я могу создать событие в определенное время? Например, скажем, я хочу создать оповещение в 8:00 утра, которое информирует меня о его 8:00 утра (или событие, которое информирует меня о текущем времени в любой момент времени).

Ответы на вопрос(4)

Решение Вопроса

ИспользоватьSystem.Threading.Timer класс:

var dt = ... // next 8:00 AM from now
var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));

callback делегат будет вызван в следующий раз, когда это 8:00 утра и каждые 24 часа после этого.

Видетьэтот ТАК вопрос Как рассчитать следующее вхождение в 8:00.

 McAden19 авг. 2009 г., 01:33
Я знаю, что по ссылке упоминается, но, возможно, захотим уточнить, что это System.Threading.Timer, а не System.Windows.Forms.Timer
 Brian Tacker23 мая 2013 г., 18:21
@Jaanus Нет, я только что попробовал, и это исключение. Если dt <DateTime.Now, тогда выполните dt.AddDays (1).
 Mark W05 февр. 2016 г., 16:07
Это кажется ненадежным на практике. Я реализовал некоторый код, используя этот класс таймера из пространства имен Threading. Он предназначен для пролистывания файла журнала в определенное время. В нашем случае полночь. Мы заметили, что в производстве иногда ролловер происходит немного раньше или чуть позже полуночи. Я предполагаю, что это достаточно хорошо для большинства реализаций, но кажется, что время выполнения может немного отличаться от вызова к вызову.
 Jaanus20 мар. 2013 г., 21:31
Будет ли это работать, если я предоставлю последние 8.00 с этого момента? Значит отрицательное число дается?
private void Run_Timer()
    {
        DateTime tday = new DateTime();
        tday = DateTime.Today;
        TimeSpan Start_Time = new TimeSpan(8,15,0);
        DateTime Starter = tday + Start_Time;
        Start_Time = new TimeSpan(20, 15, 0);
        DateTime Ender = tday + Start_Time;
        for (int i = 0; i <= 23; i++)
        {
            Start_Time = new TimeSpan(i, 15, 0);
            tday += Start_Time;
            if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
            {
                Time_To_Look = tday;
                timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
                timer1.Start();
                MessageBox.Show(Time_To_Look.ToString());
                break;
            }
        }
    }

время или изменить его на определенное время: D

 albertein11 дек. 2009 г., 00:17
Очевидно, что решение @dtb лучше.
 Mobin20 мар. 2010 г., 22:25
Но также очевидно, что вы не поняли, что человек, который задает вопрос, лучше понимает его вопрос. Я согласен, что он дал мне формат для выполнения этого в одно конкретное время дня, но я должен был заставить его работать при некоторых условиях не статически в определенное время дня, как только большая часть работы, выполняемой в моем коде, предназначена для запуска этого цикла и установки времени для следующей остановки таймера. Если вы видите, что не число строк в этом

ый подход заключается в использованииЗапланированное задание (в Windows) создать предупреждение. Возможно, вам придется написать небольшую программу, которая собирает любую информацию из файлов данных вашего основного приложения и т. Д.

Есть несколько основных преимуществ использования этого подхода:

Вам не нужно писать код для поддержки этой функции. Вы используете что-то встроенное в операционную систему. Пример для Windows, но другие ОС имеют такую же функцию. Вы можете сосредоточить усилия на разработке и поддержке на своем собственном коде.Ваше главное приложение не должно быть запущено для запуска задачи.

я так и реализовал.

  private void Form1_Load(object sender, EventArgs e)
    {
        System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);

        //first occurrence at
        var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);

        if (DateTime.Now < dt)
        {
            var timer = new System.Threading.Timer(callback, null, 
                                               //other occurrences every 24 hours
                            dt - DateTime.Now, TimeSpan.FromHours(24));
        }

    }

    private void ProcessTimerEvent(object obj)
    {
        MessageBox.Show("Hi Its Time");
    }

Ваш ответ на вопрос