Udostępnij za pośrednictwem


Używanie wątków i wątkowania

Za pomocą platformy .NET można pisać aplikacje, które wykonują wiele operacji w tym samym czasie. Operacje, które mogą opóźniać inne operacje, mogą być wykonywane na osobnych wątkach, w procesie znanym jako wielowątkowość lub swobodna wielowątkowość.

Aplikacje, które korzystają z wielowątkowości, szybciej reagują na dane wejściowe użytkownika, ponieważ interfejs użytkownika pozostaje aktywny, gdy zadania obciążające procesor są wykonywane w oddzielnych wątkach. Wielowątkowość jest również przydatna podczas tworzenia skalowalnych aplikacji, ponieważ w miarę zwiększania obciążenia można dodawać wątki.

Uwaga / Notatka

Jeśli potrzebujesz większej kontroli nad zachowaniem wątków aplikacji, możesz samodzielnie zarządzać wątkami. Jednak programowanie wielowątkowe jest znacznie uproszczone dzięki klasom System.Threading.Tasks.Parallel i System.Threading.Tasks.Task, Parallel LINQ (PLINQ), współbieżnym klasom kolekcji w przestrzeni nazw System.Collections.Concurrent oraz modelowi programowania opartego na koncepcji zadań, a nie wątków. Aby uzyskać więcej informacji, zobacz Parallel Programming and Task Parallel Library (TPL).

Instrukcje: tworzenie i uruchamianie nowego wątku

Utworzysz nowy wątek, tworząc nowe wystąpienie System.Threading.Thread klasy. Podajesz nazwę metody, którą chcesz wykonać na nowym wątku, do konstruktora. Aby uruchomić utworzony wątek, wywołaj metodę Thread.Start . Aby uzyskać więcej informacji i przykładów, zobacz artykuł Tworzenie wątków i przekazywanie danych w czasie rozpoczęcia oraz Thread dokumentację interfejsu API.

Instrukcje: zatrzymywanie wątku

Aby zakończyć wykonywanie wątku, użyj System.Threading.CancellationToken. Zapewnia ujednolicony sposób zatrzymywania wątków kooperacyjnie. Aby uzyskać więcej informacji, zobacz Anulowanie w zarządzanych wątkach.

Czasami nie można zatrzymać wątku w sposób kooperatywny, ponieważ uruchamia zewnętrzny kod, który nie jest przystosowany do kooperacyjnego anulowania. W takim przypadku możesz chcieć wymusić zakończenie jego wykonywania. Aby przymusowo zakończyć wykonywanie wątku, w programie .NET Framework można użyć metody Thread.Abort. Ta metoda generuje ThreadAbortException w wątku, w którym jest wywoływana. Aby uzyskać więcej informacji, zobacz Niszczenie wątków. Metoda Thread.Abort nie jest obsługiwana na platformie .NET Core. Jeśli musisz zakończyć wykonywanie kodu innej firmy przymusowo na platformie .NET Core, uruchom go w osobnym procesie i użyj Process.Kill metody .

Element System.Threading.CancellationToken nie jest dostępny przed programem .NET Framework 4. Aby zatrzymać wątek w starszych wersjach programu .NET Framework, użyj technik synchronizacji wątków, aby ręcznie zaimplementować anulowanie współpracy. Możesz na przykład utworzyć pole logiczne volatile shouldStop i użyć go do zażądania zatrzymania wykonywania kodu przez wątek. Aby uzyskać więcej informacji, zobacz volatile in C# Reference and System.Threading.Volatile.

Użyj metody Thread.Join, aby wątek wywołujący czekał na zakończenie wątku zatrzymanego.

Instrukcje: wstrzymywanie lub przerywanie wątku

Używasz metody Thread.Sleep do wstrzymania bieżącego wątku na określony czas. Zablokowany wątek można przerwać, wywołując metodę Thread.Interrupt . Aby uzyskać więcej informacji, zobacz Wstrzymywanie i przerywanie wątków.

Właściwości wątku

W poniższej tabeli przedstawiono niektóre właściwości Thread.

Majątek Opis
IsAlive Zwraca wartość true, jeśli wątek został uruchomiony i nie został jeszcze zakończony normalnie ani przerwany.
IsBackground Pobiera lub ustawia wartość logiczną wskazującą, czy wątek jest wątkiem w tle. Wątki tła są podobne do wątków pierwszego planu. Jednak wątek w tle nie uniemożliwia zatrzymania procesu. Po zatrzymaniu wszystkich wątków pierwszego planu należących do procesu, środowisko uruchomieniowe języka wspólnego kończy proces, wywołując metodę Abort w wątkach w tle, które nadal działają. Aby uzyskać więcej informacji, zobacz Foreground and Background Threads (Wątki pierwszego planu i tła).
Name Pobiera lub ustawia nazwę wątku. Najczęściej używane do odnajdywania poszczególnych wątków podczas debugowania.
Priority Pobiera lub ustawia ThreadPriority wartość używaną przez system operacyjny do określania priorytetów planowania wątków. Aby uzyskać więcej informacji, sprawdź Planowanie wątków i ThreadPriority odwołanie.
ThreadState Pobiera wartość ThreadState zawierającą bieżące stany wątku.

Zobacz także