Время работы по таймеру - C#
Формулировка задачи:
Подскажите пожалуйста как посчитать время работы по таймеру, например:
Чтение регистра происходит раз в секунду, если в регистре записан "0" значит двигатель выключен, как только появляется "1" мы включаем таймер и когда снова появился "0" мы полученную цифру работы пишем в базу и всё по новой.
регистр читать умею, в базу писать умею...
Решение задачи: «Время работы по таймеру»
textual
Листинг программы
private bool isStarted = false;//флаг того, что таймер запущен. возможно напрочь не нужен, но я не сильно лез в свойства StopWatch-а
private System.Diagnostics.Stopwatch swTimer = new System.Diagnostics.Stopwatch();//сам таймер. хотя таймером его назвать сложно.
private int registerValue = 0; //поле, хранящее значение
public int RegisterValue //свойство, для доступа к полю
{
get { return registerValue; } //возвращает без всяких закидонов
set { //вот он страшный set, установка..
if (registerValue == value)//если значение прочиталось такое же как и было..
return; //..то нечего его обрабатывать, выход
registerValue = value;//приминение прочитанного значения
if (value == 0) //если значение стало нулём
Stop();//..останавливаем работу таймера
else Start();//если стало НЕ нулём - запускаем таймер
}
}
public void Stop()//метод остановки таймера
{
if (!isStarted) return;//если не запущен - то нечего останавливать, выход
swTimer.Stop();//остановка таймера
Console.WriteLine(swTimer.Elapsed.ToString());//вывод отработанного времени
//для ООП нужно будет создать событие и вызывать его
}
public void Start()//запуск таймера
{
isStarted = true;//установка флага запущенности
swTimer.Start();//непосредственный запуск таймера
}
private void Register_Readed(int value) //этот метод - прочтение значения регистра
{
RegisterValue = value;//обращение ко свойству, которое будет обращаться к полю
}