Как написать планировщик C#
Как написать предупреждение, которое будет работать на 00:00, 00:15, 00:30, и так каждый день?
можете ли вы дать мне пример кода?
спасибо.
6 ответов
вы можете использовать таймер, который работает каждую минуту, которая проверяет текущее время. Чек может выглядеть так:
private void OnTimerTick()
{
if(DateTime.Now.Minutes%15==0)
{
//Do something
}
}
но если вы ищете программу или службу, которая должна запускаться каждые 15 минут, вы можете просто написать свое приложение и запустить его с помощью запланированной задачи windows.
вы можете написать свою программу для выполнения определенной задачи каждый раз, когда она открывается, затем вы используете запланированные задачи Windows для выполнения вашей программы каждый день в определенное время.
ваша программа будет проще, и вы сосредоточитесь только на логике, которую вам нужно реализовать, планирование будет сделано Windows для вас, бесплатно (при условии, что вы уже заплатили Windows :) ).
Если вы действительно хотите реализовать планирование самостоятельно, есть фреймворки и библиотеки, такие как этот:Quartz.NET
Если вы хотите службу windows, которая выполняет некоторый код с некоторым промежутком времени, вам нужно создать проект службы (см. здесь), и использовать в этой службе класс Timer (см. здесь). Если вы хотите запустить эту задачу при выполнении приложения windows, используйте Windows.Формы.Таймер, как упоминалось ранее.
есть разные таймеры в .NET
- система.Нарезка резьбы.Таймер
- система.Окна.Формы.Таймер
- система.Таймеры.Таймер
в зависимости от того, что вы хотите сделать (и в какой среде, threadsave, bla bla) вы должны выбрать один из них.
некоторые информация
вот базовый планировщик C#:
using System;
using System.Threading;
using System.Windows.Forms;
using System.IO;
public class TimerExample
{
public static void Main()
{
bool jobIsEnabledA = true;
bool jobIsEnabledB = true;
bool jobIsEnabledC = true;
Console.WriteLine("Starting at: {0}", DateTime.Now.ToString("h:mm:ss"));
try
{
using (StreamWriter writer = File.AppendText("C:\scheduler_log.txt"))
{
while (true)
{
var currentTime = DateTime.Now.ToString("h:mm");
if (currentTime == "3:15" && jobIsEnabledA)
{
jobIsEnabledA = false;
ThreadPool.QueueUserWorkItem((state) => { MessageBox.Show(string.Format("Time to brush your teeth! {0}", currentTime) ); });
}
if (currentTime == "3:20" && jobIsEnabledB)
{
jobIsEnabledB = false;
ThreadPool.QueueUserWorkItem((state) => { MessageBox.Show(string.Format("Time to brush your teeth! {0}", currentTime)); });
}
if (currentTime == "3:30" && jobIsEnabledC)
{
jobIsEnabledC = false;
ThreadPool.QueueUserWorkItem((state) => { MessageBox.Show(string.Format("Time for your favorite show! {0}", currentTime)); });
}
if (currentTime == "3:31")
{
jobIsEnabledA = true;
jobIsEnabledB = true;
jobIsEnabledC = true;
}
var logText = string.Format("{0} jobIsEnabledA: {1} jobIsEnabledB: {2} jobIsEnabledC: {3}", DateTime.Now.ToString("h:mm:ss"), jobIsEnabledA, jobIsEnabledB, jobIsEnabledC);
writer.WriteLine(logText);
Thread.Sleep(1000);
}
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
}
например:
using System.Timers;
class Program
{
static void Main(string[] args)
{
Timer timer = new Timer();
timer.Interval = new TimeSpan(0, 15, 0).TotalMilliseconds;
timer.AutoReset = true;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
throw new NotImplementedException();
}
}