Post on 28-Jan-2021
1 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD
Wykład 11 Wątki,
Timer
Wizualne systemy programowania
2 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD
Wątki – programowanie współbieżne
Wizualne systemy programowania
3
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Wątki – klasa BackgroundWorker – umożliwiają delegowanie pewnych
operacji do wątków pracujących współbieżnie (równolegle) z główna
aplikacją.
Za ich pomocą pewne operacje mogą być wykonywane w tle,
Uruchomienie wątku:
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.RunWorkerAsync();
4
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Należy pamiętać o dodaniu komponentu BacgroundWorker do
projektu.
Utworzony zostanie
instancja tej klasy –
w naszym
przykładzie - obiekt
bacgroundWorker1
5
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Klasa BackgroundWorker posiada zdarzenia:
DoWork – w którym umieszczamy operacje do wykonania w tle
RunWorkerCompleted – które wywoływane jest po zakończeniu pracy
wątku.
ProgressChanged – który wykorzystać można do raportowania
postępów wątku do programu głównego (pasek postępu)
6
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
DoWork – w którym umieszczamy operacje do wykonania w tle.
Uwaga: z wnętrza metody obsługi zdarzenia DuWork nie mamy
możliwości sięgnięcia do kontrolek okna głównego programu.
Metoda DoWork zwraca wartość za pośrednictwem zmiennej „e”
Np.: e.Result = wynik_obliczen;
7
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Metoda DuWork może otrzymać parametry „zapakowane” w argument „e”
typu DoWorkEventARGS.
Np.:
Wywołanie wątku z argumentem:
backgroundWorker1.RunWorkerAsync(50);
Odebranie argumentu w metodzie DoWork:
int a = (int)e.Argument;
8
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
ProgressChanged – metoda, którą wykorzystać można do
raportowania postępów wątku do programu głównego (pasek postępu)
Metoda ProgressChanged musi być wywoływana cykliczne wewnątrz
metody DoWork() z parametrem mówiącym o postępie wątku.
backgroundWorker1.ReportProgress (i);
Z wewnątrz metody ProgressChanged możemy sięgnąć do kontrolek
procesu głównego.
Np.: progressBar1.PerformStep();
lub
progressBar1.Value = e.ProgressPercentage;
9
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Wstrzymanie pracy wątku:
Thread.Sleep (czas);
czas – podany w milisekundach
Dodać należy przestrzeń nazw: using System.Threading;
10
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Przerywanie wątku
Do przerwania pracy wątku służy metoda CancelAsync()
Np.: backgroundWorker1.CancelAsync();
UWAGA: nie wymusza ona bezwarunkowego przerwania wątku –
stanowi tylko informację, że wątek powinien zakończyć pracę. Sposób
jego zakończenia należy zdefiniować wewnątrz wątku.
11
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Oprogramowanie przerwania wątku:
W metodzie DoWork dodajemy reakcję na własność
CancellationPendin (true oznacza żądanie przerwania wątku)
if (backgroundWorker1.CancellationPending == true) {
//akcja wątku
} else {
e.Cancel = true;
break;
}
W takim przypadku ustawiamy pole Cancel zdarzenia „e” na true
(potwierdzamy zamknięcie) i przerywany pracę metody DoWork
(polecenie break)
12
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Oprogramowanie przerwania wątku:
W metodzie RunWorkerComleted, która kończy pracę wątku.
if (e.Cancelled == true) {
richTextBox1.Text = "Błąd: wątek został zatrzymany";
} else {
// normalne zakończenie pracy wątku
}
Jeżeli pole Canceled zdarzenia „e” jest równe true (wątek został
zamknięty) reagujemy na ten fakt – np. wypisując komunikat o
błędzie. W przeciwnym razie kończmy wątek normalnie
13
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
PRZYKŁAD:
Generowanie tablicy stringów w
osobnym wątku (sztucznie
spowolnione)
14
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Uruchamianie wątku – po kliknięciu przycisku „Start”
15
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Zdarzenie DoWork – wykonywane w
trakcie pracy wątku – jego główne
zadania
16
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Zdarzenie RunWorkerCompleted –
wykonywane po zakończeniu wątku –
zwraca wygenerowaną tablice do pola
tekstowego
17
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Zdarzenie ProgressChanged – sterowanie paskiem postępu
Zdarzenie to wywoływane jest w DoWork:
backgroundWorker1.ReportProgress(i + 1);
18
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Przerwanie wątku
Wymaga zmian w DoWork i
RunWorkerCompleted
Patrz poniżej
19
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Zdarzenie DoWork –
wykonywane w trakcie pracy
wątku – jego główne zadania
20
Wątki
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Zdarzenie RunWorkerCompleted –
wykonywane po zakończeniu wątku –
zwraca wygenerowaną tablice do pola
tekstowego
21 dr Artur Bartoszewski -Wizualne systemy programowania , sem. III- WYKŁAD
Timer
Wizualne systemy programowania
Timer jest wątkiem
pracującym w tle który
co pewien czas
wywołuje jakąś akcję
22
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Rozpocząć należy od dodania komponentu Timer do projektu.
Utworzony zostanie
instancja tej klasy –
w naszym
przykładzie - obiekt
timer1
23
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Timer posiada metodę Tick która wywoływana jest co określony
interwał czasu.
Oprogramowanie timera to
właściwie oprogramowanie
tej metody
24
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Ustawienia timera:
• Enabled – timer włączony / zatrzymany
• Interval – odstęp pomiędzy wywołaniami
metody Tick – w milisekundach)
Z poziomu kodu:
• Uruchomienie timera
• Zmiana interwału
25
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
PRZYKŁAD:
Sterowanie paskiem postępu
za pomocą timera, z regulacją
prędkości.
26
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Uruchomienie i zatrzymanie Timera
27
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Metoda Tick – zwiększa wartość kontrolki
progressBar
(pilnuje też, żeby nie nastąpiło jej
przepełnienie)
28
Timer
Programowanie wizualne – Windows Forms
dr Artur Bartoszewski - Wizualne systemy programowania , sem. III- WYKŁAD
Sterowanie „prędkością” timera – czyli
ostępami pomiędzy wykonaniami metody
Tick
29
Literatura:
dr Artur Bartoszewski - Programowanie obiektowe , sem. 1I - WYKŁAD
Użyte w tej prezentacji tabelki pochodzą z książki: Visual Studio 2013. Podręcznik programowania w C# z
zadaniami Autor: Matulewski Jacek, Helion
https://www.google.pl/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwjmo9SKyPfdAhVxsosKHdpVCj0QjRx6BAgBEAU&url=https://helion.pl/ksiazki/microsoft-visual-studio-2012-programowanie-w-c-dawid-farbaniec,vs12pc.htm&psig=AOvVaw3zpLnPQDVamj_KSB_3RJzC&ust=1539112789582844