Вы говорите, что уже пробовали логическое значение, указывающее, что сообщение уже было показано, я предполагаю, потому что код, вероятно, выглядел так, как показано ниже.
void TimerLoop()
{
bool msgAlreadyShown;
if(!msgAlreadyShown)
{
MessageBox.Show("!!!!!!!");
}
// Other work in your timer function
}
Проблема с этим кодом заключается в том, чтоbool будет установлен в false каждый раз, когда функция вызывается таймером.Вы не опубликовали много кода, но вы, по крайней мере, указали, что пытаетесь выполнить, таймер, который проверяет, нужно ли пользователю представлять напоминание.
Я собираюсь сделать несколькодикие предположения о том, как вы собрали свое программное обеспечение, есть большая вероятность, что оно далеко, но я надеюсь, что оно может указать вам верное направление.У вас может быть некоторый класс напоминаний, подобный этому:
public class Reminder
{
string Message { get; set;}
DateTime Alarm { get; set; }
bool IsDismissed { get; set; }
}
Я предполагаю, что вы можете захотеть иметь несколько напоминаний, которые можно проверять в цикле таймера, чтобы ваш цикл таймера мог выглядеть примерно так:
private List<Reminder> _activeReminders; // A list of reminders
void TimerLoop(object s, ElapsedEventArgs e)
{
lock(_activeReminders)
{
var now = DateTime.Now;
foreach(var reminder in _activeReminders)
{
// only run this code if the time has passed and it hasn't already
// been shown
if(now.CompareTo(reminder.Alarm) >= 0 && !reminder.IsDismissed)
{
MessageBox.Show(reminder.Message);
reminder.IsDismissed = true;
}
}
}
}
Это довольно наивная реализация, так как вы, вероятно, не хотите навсегда удерживать напоминания, и напоминания никогда не удаляются из списка _activeReminders
, но по сути вам просто нужно добавитькакое-то состояние, чтобы определить, было ли уже показано напоминание.
Конечно, это также не полный пример, так как я никогда не обновляю поле _activeReminders
и не добавляю к нему что-либо, но я думаю, что это может помочь понять, что вам нужно сделать через,Кроме того, вы можете не заботиться о множественных напоминаниях, и ваш код таймера может выглядеть совсем не так.Основная идея состояла в том, чтобы показать вам, как вы можете отслеживать состояние напоминания и адаптировать его к своему собственному коду.Вышесказанное было просто примером.
Кроме того, я на самом деле не проверял его, поэтому относился к нему больше как к псевдокоду, чем к чему-либо еще.Однако логика логична и должна вызывать появление окна сообщения только один раз.