Как я могу создать событие в определенное время? Например, скажем, я хочу сгенерировать предупреждение в 8:00, которое сообщит мне его 8:00 (или событие, которое информирует меня о текущем времени в любой момент времени).
Как создать оповещение в определенное время на С#?
Ответ 1
Используйте 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 часа после этого.
Смотрите этот вопрос SO, как рассчитать следующее появление в 8:00 утра.
Ответ 2
Разрабатывая ответ на dtb, я понимаю, как это реализовано.
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");
}
Ответ 3
Должна ли быть создана ваша программа? Альтернативный подход заключается в использовании Запланированная задача (в Windows) для генерации предупреждения. Возможно, вам потребуется написать небольшую программу, которая собирает любую информацию из ваших основных файлов данных приложения и т.д.
Существует несколько основных преимуществ использования этого подхода:
- Вам не нужно писать какой-либо код для поддержки этой функции. Вы используете что-то, встроенное в операционную систему. Пример для Windows, но другие ОС имеют одинаковую функцию. Вы можете сосредоточить свое развитие и поддержку на своем собственном коде.
- Ваше основное приложение не должно запускаться для запуска задачи.
Ответ 4
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