Во-первых, довольно просто настроить таймер для этой проверки. Инициализируйте таймер,
int _State;
System.Timers.Timer stateCheckTimer = new System.Timers.Timer();
stateCheckTimer.Interval = 1000; // TODO - set to desired interval (in ms)
stateCheckTimer.AutoReset = true;
stateCheckTimer.Elapsed += stateCheckTimer_Elapsed;
Затем просто проверьте свое состояние в функции stateCheckTimer_Elapsed
,
void stateCheckTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Check for the desired state
if (_State == 1)
{
// Do something
}
}
Самым сложным будет доступ к _State, так что вам, вероятно, придется поместить таймер в то же место, что и он (или он прошел, что бы ни работало). Я бы предложил решение, основанное на событиях, хотя. Создайте в вашем классе открытый обработчик событий, который обрабатывает состояние,
public EventHandler OnStateChanged;
Затем инкапсулируйте доступ к вашей переменной состояния (в этом примере _State
), чтобы вы могли контролировать ее настройку. Когда он установлен, выключите это событие. Я делаю это через свойство,
public int State
{
get { return _State; }
set
{
_State = value;
if (OnStateChanged != null)
{
OnStateChanged(this, null);
}
}
}
Затем вам просто нужно подключить дескриптор события для выполнения желаемого действия,
OnStateChanged += StateChangeAction;
И в этой функции выполните желаемое действие,
void StateChangeAction(object sender, EventArgs args)
{
// Check for the desired state
if (_State == 1)
{
// Do something
}
}
(вы должны будете передать состояние через аргументы EventArgs, но это довольно просто сделать). Таким образом, всякий раз, когда состояние изменяется, вы немедленно сможете воздействовать на него (отправлять электронную почту, делать то, что оно есть) вместо того, чтобы опрашивать состояние каждые x секунд или минут. Он будет использовать меньше ресурсов, будет быстрее реагировать (быстрее) и, в конечном итоге, будет более аккуратным кодом! Если вы можете сделать это таким образом, я очень рекомендую это.