C# Как реализовать напоминание

Статус: Offline
Реєстрація: 30.03.2007
Повідом.: 1286
C# Как реализовать напоминание

Всем привет! Пишу программку что-то наподобие планировщика заданий. Хочу добавить в неё что-то вроде напоминаний, но не знаю как это корректно реализовать. Решил сделать в виде отдельного потока, который постоянно сверяет время начала задания с текущим и в случае сходства выдает напоминание на экран. По сути работает, но этот процесс грузит 50% cpu. Вот его незамысловатый код:

while (true)
{
if (count != 0)
{
for (int i=0; i<count; i++)
{
if (Form1.allTasks.startDate == DateTime.Now)
{
//Тут должно появиться окно с напоминанием!
}
}
}

}

Причина впринципе понятна. Бесконечный цикл полюбому будет жутко грузить любой процессор. Но вот как реализовать эту штуковину по другому? Может кто-то сталкивался?
 
ну так тупо всавь слип побольше
пусть сверяется раз ~ раз в минуту
или тебе нужен планировщик на каждую долю секунды :)
 
В том то и дело что не нужен. Ты имеешь виду в тело цикла вставить? Попробую, спасибо за совет
 
Помогло. Hisp, огромное спасибо :)
 
Блин, отдельный поток, слип...
А почему б просто таймер не заюзать?
 
А как по таймеру сверяться? Там можно дату сверить?
 
Блин, отдельный поток, слип...
А почему б просто таймер не заюзать?

Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится
 
Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится
Создай таймер чтобы он сработал в нужное время. И в обработчике выдай напоминание. Неужто это так сложно?
 
Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится

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

void Timer1Tick(object sender, System.EventArgs e)
{
if (DateTime.Now >= timeToFire)
{
//выводим напоминание
//...
timer1.Enabled = False;
}
}

типа того
 
оптимизация кода в реальном времени :)
 
Почти так.. Но ведь у тебя не одно задание..Создай событие.. В котором, будет очередь ожиданий, а реально заряжать таймер только на самое первое по времени задания. Это позволит не плодить "потоки".
 
Почти так.. Но ведь у тебя не одно задание..Создай событие.. В котором, будет очередь ожиданий, а реально заряжать таймер только на самое первое по времени задания. Это позволит не плодить "потоки".

Стопудов, там же можно цепочку делегатов заюзать, по одному на каждое событие.

Правда события друг от друга должны быть независимые, они ж вызываться будут в отфонарном порядке...
 
Спасибо всем за советы. С каждого взял по чуть-чуть :) Реализовал с помощью таймера. Причем сделал его внутри моего класса "задача" как статический. Поэтому поток плодиться не будет. При создании новой задачи он стартует. Обработчик выполняется для всех задач. Там они перебираются и соответственно выводятся напоминания. А после напоминания я просто определяю есть ли ещё задачи, если нет то я останавливаю таймер. А как только создаю новую он опять соответственно стартует и т.д. Вобщем всё довольно неплохо получилось. Ещё раз спасибо всем.
 
Назад
Зверху Знизу