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

Niedziałający czasomierz

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
61 wizyt
pytanie zadane 19 września w C# przez sisOOO Obywatel (1,320 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 przez adrian17 Ekspert (334,700 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 przez sisOOO Obywatel (1,320 p.)
Dzięki :)
komentarz 19 września przez sisOOO Obywatel (1,320 p.)

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

1
komentarz 20 września przez adrian17 Ekspert (334,700 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ź 382 wizyt
pytanie zadane 16 maja 2020 w C# przez AgentTecza Obywatel (1,790 p.)
0 głosów
1 odpowiedź 509 wizyt
pytanie zadane 6 kwietnia 2019 w C# przez WojMen Początkujący (330 p.)
0 głosów
3 odpowiedzi 456 wizyt
pytanie zadane 1 maja 2018 w C# przez Misiek Mądrala (5,300 p.)

91,832 zapytań

140,508 odpowiedzi

317,004 komentarzy

61,163 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...