C# (Windows Forms) operacje na czasie

0

Witam,
robię program z serii tych banalnych i utknąłem na "pomyśle".

Generalnie program ma za zadanie po uruchomieniu wyświetlić kilka button'ów i wszystkie mają działać tak samo, czyli:

wyświetlać START, po wciśnięciu pokazują czas wciśnięcia +1h czyli:

dtczas01 = DateTime.Now;
(...)
            private void timer1_Tick(object sender, EventArgs e)
            {
            button1.Text = czas01.ToString() + "\n" + dtczas01.AddHours(1).ToString("HH:mm:ss tt");
            if (czas01 == 0)
            {
                czas01 = 3600;
                button1.Enabled = true;
                button1.Text = "START";
                timer1.Enabled = false;
                System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
                System.IO.Stream s = a.GetManifestResourceStream("WindowsFormsApplication1.Alarm.wav");
                SoundPlayer player = new SoundPlayer(s);
                player.Play();
                return;
            }
            else
                czas01--;
        }

i wyświetlają dodatkowo ilość sekund pozostałą do osiągnięcia tego czasu i tu zaczynają się schody. Korzystając z timer1.Interval = 1000; (nawet kiedy zmniejszam ilość milisekund chcąc uwzględnić czas wykonywania się pozostałych funkcji) to ten czas jest tak niedokładny jakby ktoś liczył go sobie w pamięci.

Pomyślałem, że już dam sobie spokój z tym odliczaniem sekund w button'ie i zrobię tak, że w momencie gdy czas osiągnie wymaganą wartość (np. o 15:20 klikam button, o 16:20 ma mi odtworzyć .wav'a). Tylko teraz mam problem. DateTime.Now ma w sobie dużo śmieci. Jak najlepiej zrobić if'a żeby chciał zadziałać, że o tej 16:20 warunek będzie prawdziwy i mi odtworzy tego wav'a?

Z góry serdecznie dziękuję za sugestie.

0

Timer nie jest dokładny, więc jeśli chcesz wyświetlić odliczanie to co każdy tick pokazuj AktualnyCzas-CzasUruchomieniaTimera
Co do pytania:

if((AktualnyCzas-CzasUruchomieniaTimera) > 1h) //1h to TimeSpan
{
     ZatrzymajTimer();
     Graj();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1