uśpienie programu

0

Napisałem pewien kod:
for (i = 0; i < 3; i++)
{

            label1.Text = słowo_1[i];
            label1.Visible = true;
            
            Thread.Sleep(1000);
            

            label2.Text = słowo_2i[i];
            label2.Visible = true;
            
            Thread.Sleep(1000)
            label1.Visible = false;
            label2.Visible = false;
          }

I tu mam problem, ponieważ planowałem że pętla wykona sie 3 razy i w każdym cyklu napis pojawi się po nim dopiero następny po 1s. Jednak jest problem ponieważ gdy odpalę program pojawi mi się po 6s slowo_1[2] i slowo_2[2] jednocześnie, zaś slowo_1[0] slowo_1[1] slowo_2[0] i slowo_2[0] w ogóle się nie pojawiają. Nie wiem czy jest to możliwe przy użyciu komendy Thread.Sleep. Może trzeba zastosować timer, jeśli tak to w jaki sposób. proszę o pomoc.

0
            for (int i = 0; i < 3; i++)
            {               
                label1.Text = słowo_1[i];
                label1.Visible = true;
                Application.DoEvents();
                Thread.Sleep(1000);               
                label2.Text = słowo_2[i];
                label2.Visible = true;
                Application.DoEvents();
                Thread.Sleep(1000);
                label1.Visible = false;
                label2.Visible = false;
            }

Jak usypiasz wątek w pętli, to aplikacja nie odbiera Windows Messages, więc forma nie odrysowuje się. Użyj metody Application.DoEvents(), która powoduje odebranie Message-y systemowych przez aplikację;</i>

0

Ale zdecydowanie lepszym i bezpieczniejszym wyjściem jest użycie timera...

0
idziewiosna napisał(a)

Ale zdecydowanie lepszym i bezpieczniejszym wyjściem jest użycie timera...

Dlaczego lepszym i dlaczego bezpieczniejszym?
Masz jakieś argumenty, czy tak strzelasz "na pałę", żeby coś napisać.

0

dlatego, ze mimo iz dasz sobie DoEvents() tuz przed sleep(1000), to i tak przez owe 1000 milisekund aplikacja bezdie zawieszona i nieodbierze ani nie przetworzy zadnych eventow ad do napotkania tego kolejnego doevents, poczym znowu bedzie miala 1000ms dziure w zyciorysie. co oczywiscie nie przeszkadza faktowi, ze jesli przez te 1000ms i tak nic nie przyjdzie, to olac to. jednak przy wiekszym programie lub gdy ten kodzik jest czesto wywolywany mozna sie przykro zdziwic i potem szukac przez X godzin czemu mi sie program tak ladnie 'skacze'

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