• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niedziałający czasomierz

0 głosów
411 wizyt
pytanie zadane 19 września 2023 w C# przez sisOOO Obywatel (1,430 p.)

Witam
Zrobiłem czasomierz, który nie wiedzieć czemu się zacina. Ogólnie to działa, gdy wepcham MessegeBox'a do środka pętli i gdy kliknę "okej" to zegar traci wartość o 1. Jednak gdy użyję sleep coś się krzyczy. Ktoś by mógł mi powiedzieć dlaczego i co zrobić w takiej sytuacji

zmienna countTime jest typu DateTime a strTime typu string. Wszystko jest robione przy pomocy winforms.

DateTime startTime = new DateTime();

startTime = startTime.AddMinutes((int)numTime.Value);
countTime = startTime;

strTime = startTime.Minute.ToString() + ":" + startTime.Second.ToString() + ":" + startTime.Millisecond.ToString();

lblTime.Text = strTime;

while (countTime > DateTime.MinValue)
{
    Thread.Sleep(1);
    countTime = countTime.AddMilliseconds(-1);

    strTime = countTime.Minute.ToString() + ":" + countTime.Second.ToString() + ":" + countTime.Millisecond.ToString();

    lblTime.Text = strTime;
}

 

1 odpowiedź

0 głosów
odpowiedź 19 września 2023 przez adrian17 Mentor (354,120 p.)

coś się krzyczy

Nie napisałeś co konkretnie, ale zgaduję - okno się "zacina"?

Nie powinieneś takiego (kręcącego się w kółko przez jakiś czas) kodu pisać, bo nie wychodząc z metody nie pozwalasz okienku obsługiwać zdarzeń.

Zamiast pętli po czasie i Sleep()ów w głównym wątku, powinieneś użyć np Timera żeby winforms sam wykonywał daną metodę np równo co sekundę.

// np po wcisnieciu przycisku albo po odpaleniu okna, w konstruktorze
{
    timer.Interval = 1000;
    timer.Tick += OnTick;
    timer.Start();
}

public void OnTick(object sender, EventArgs e)
{
    // tutaj np zaktualizuj labelki timera
}

 

komentarz 19 września 2023 przez sisOOO Obywatel (1,430 p.)
Dzięki :)
komentarz 19 września 2023 przez sisOOO Obywatel (1,430 p.)

@adrian17, Hej powiesz jescze czym jest OnTick? Wsadziłem to do metody "timer_Tick" to jest to?

1
komentarz 20 września 2023 przez adrian17 Mentor (354,120 p.)
No... to jest Twoja metoda która ma się wywoływać gdy timer... tyka. Możesz ją przecież nazwać jak chcesz :)

Podobne pytania

0 głosów
1 odpowiedź 1,609 wizyt
pytanie zadane 16 maja 2020 w C# przez AgentTecza Obywatel (1,810 p.)
0 głosów
1 odpowiedź 939 wizyt
pytanie zadane 6 kwietnia 2019 w C# przez WojMen Początkujący (330 p.)
0 głosów
3 odpowiedzi 733 wizyt
pytanie zadane 1 maja 2018 w C# przez Misiek Mądrala (5,320 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...