Countdown timer & Stopwatch

Секундомер

Секундомера се намира в таба Stopwatch. Той е напълно независим от обратното броене и двете могат да работят успоредно едновременно. Секундомера разполага с опциите да засичаме време с точност до милисекунда, да засичаме отделни обиколки, да спрем отчитането за момент чрез пауза и да запишем времената на обиколките в текстов файл.

Основният метод тук се нарича startMS() който е асинхронен.

public static void startMs()
{
    tempSeconds1 = (byte)DateTime.Now.Second;
    if (lapCount == 0)
    {
        lapSeconds = seconds;
        lapMinutes = minutes;
        lapHours = hours;
    }
    if (tempSeconds1 == tempSeconds2)
    {
        seconds++;
        lapSeconds++;
        tempSeconds2 = (byte)(tempSeconds1 + 1);
    }
    if (tempSeconds1 == 0 && !sixty)
    {
        seconds++;
        tempSeconds2 = 1;
        sixty = true;
    }
    if (seconds == 10) sixty = false;
    if (seconds > 59)
    {
        seconds = 0;
        minutes++;
        lapMinutes++;
    }
    if (minutes > 59)
    {
        minutes = 0;
        hours++;
        lapHours++;
    }
}

Той се задейства след натискането на Start бутона и се изпълнява веднъж на всеки 33 милисекунди, което означава и че опресняването на времето на екрана ще се осъществява за същия интервал.

Реализация

За реализирането на програмата е нужно да се използва системното време. То се използва на мястото на високо-прецизен таймер, който би изисквал доста хардуерни ресурси. Първо, секундите от системното време се взимат и се записват в променливата tempSeconds1. tempSeconds1 и tempSeconds2 се използват за да отчитат интервала от една секунда. tempSeconds2 се декларира като tempSeconds1 + 1 секунда. Когато измине 1 секунда tempSeconds1 се изравнява с tempSeconds2 и това индикира преминаването на една секнуда. Когато това се случи tempSeconds2 се увеличава с 1 и процеса започва отначало. За да се избегне положението когато tempSeconds1 е 59 tempSeconds2 да стане 60, се използва булевата “sixty”. По тови начин когато tempSeconds2 е 60, променливата веднага се променя на 0 и минутите се увеличават с 1.
Секундите, минутите и часовете се променят по сходен начин както при обратното броене. Милисекундите обаче не са свързани с този процес. Те се взимат от системното време, като така се спестява нуждата от прецизен таймер. Следи се и за правилното изписване на числата. Когато милисекундите са съставени от една цифра, се добавят “00” пред нея за да се изобрази трицифрено число. Когато милисекундите са двуцифрено число, тогава се добавя само “0”. По същият начин се проверяват секундите, минутите и часовете. Целият метод се изпълнява когато stopwatchRunning булевата е true.
За засичането на обиколки се използва бутона “Lap”. Той използва listBox контейнер, за изобразяването на обиколките. Данните които се съхраняват са: номер на обиколката, общото време от започването на секундомера, с точност до милисекунди и времето на самата обиколка, с точност до секунда.
За пауза се използва бутона Pause. Неговата функция е да променя булевата stopwatchRunning към false, за да спре времето или към true, за да възобнови спряното време.
Save се използва за записването на времето в текстов файл. Запазването е възможно само когато секундомера е приключил и има поне една отчетена обиколка.


Source: Github Download: Link


← Обратно