Thread.Sleep - opóźnienie czasowe

0

Witam.

Mój problem dotyczy opóźnienia czasowego. Jak to zrobić znalazłem w necie(jak w temacie). Jednak po zastosowaniu tej metody nie działa to tak jak chcę... a chcę żeby po kliknięciu przycisku zmienił on napis na np. working.... i po np. 3 sek. zmienił z powrotem na stan początkowy.

 

void WczytajClick(object sender, EventArgs e)
	{        
	         Wczytaj.text = "working...";
	         Thread.Sleep(3000);
                 Wczytaj.text = "Wczytaj";
	}

I tu właśnie to nie działa bo kliknięciu przycisku najpierw następuje wstrzymanie na 3 sek a później dopiero pojawia się napis working...

Proszę o pomoc.

1

Bo zamrażasz wątek GUI.
To co robisz nie ma sensu, co naprawdę chcesz osiągnać?

1

az sie prosi o uzycie async/await, co mozesz zrobic to a) zmienic WczytajClick na async b) po zmianie textu na 'working...' dac await Task.Delay c) przywrocic przycisk do poprzedniego stanu

0

Szczerze powiem, nie wiem po co dostarczają tą funkcję Thread.Sleep (we wszystkich frameworkach i językach).
Nigdy nie widziałem sensownego użycia tej funkcji (nie licząc prostych programów konsolowych, które nie mają event loop-a), a milion razy widziałem pytania takie jak to, albo jeszcze gorszą próbę synchronizacji wątków za jej pomocą.

0
somekind napisał(a):

To co robisz nie ma sensu, co naprawdę chcesz osiągnać?

Hehe teoretycznie nie ale ja chcę "udowodnić" że danych załadowanych jest tak dużo, że nawet dobry komputer ma problem z ich przeanalizowaniem :P Taki mały niewinny myczek :)

1

@katelx dała ci podpowiedź. oto gotowiec:

async void WczytajClick(object sender, EventArgs e)
{        
    Wczytaj.text = "working...";
    await Task.Delay(3000);
    Wczytaj.text = "Wczytaj";
}

W takiej postaci wymaga .NET 4.5.
Pod 4.0 potrzebna jest paczka NuGeta "Microsoft Async", a Task trzeba zamienić na TaskEx. Widziałem też napisaną przez kogoś dla .NET 3.5, nie pamiętam nazwy.

0

GUI nie odwiezy sie dopoki nie skonczy sie metoda.

Uzyj BackgroundWorker'a

Nauczysz sie na tym malym programie, przyda Ci sie w wiekszych.

Poczytaj tutaj:

https://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx?f=255&MSPPError=-2147217396

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