Delen via


Het gebruiken van threads en multithreading

Met .NET kunt u toepassingen schrijven die meerdere bewerkingen tegelijk uitvoeren. Bewerkingen met het potentieel van het vasthouden van andere bewerkingen kunnen worden uitgevoerd op afzonderlijke threads, een proces dat bekend staat als multithreading of gratis threading.

Toepassingen die multithreading gebruiken, reageren meer op gebruikersinvoer, omdat de gebruikersinterface actief blijft als processorintensieve taken worden uitgevoerd op afzonderlijke threads. Multithreading is ook handig wanneer u schaalbare toepassingen maakt, omdat u threads kunt toevoegen wanneer de workload toeneemt.

Opmerking

Als u meer controle nodig hebt over het gedrag van de threads van de toepassing, kunt u de threads zelf beheren. Multithreaded programmeren is echter aanzienlijk vereenvoudigd met de System.Threading.Tasks.Parallel en System.Threading.Tasks.Task klassen, Parallel LINQ (PLINQ), gelijktijdige verzamelingsklassen in de System.Collections.Concurrent naamruimte en een programmeermodel dat is gebaseerd op het concept van taken in plaats van threads. Zie TPL (Parallel Programming and Task Parallel Library) voor meer informatie.

Procedure: Een nieuwe thread maken en starten

U maakt een nieuwe thread door een nieuw exemplaar van de System.Threading.Thread klasse te maken. U geeft de naam op van de methode die u wilt uitvoeren op de nieuwe thread naar de constructor. Als u een gemaakte thread wilt starten, roept u de Thread.Start methode aan. Zie het artikel Over het maken van threads en het doorgeven van gegevens bij de begintijd en de Thread API-referentie voor meer informatie en voorbeelden.

Handleiding: Een thread stoppen

Als u de uitvoering van een thread wilt beëindigen, gebruikt u de System.Threading.CancellationToken. Het biedt een geünificeerde manier om threads gezamenlijk te stoppen. Zie Annulering in beheerde threads voor meer informatie.

Soms is het niet mogelijk om een thread gezamenlijk te stoppen omdat er code van derden wordt uitgevoerd die niet is ontworpen voor coöperatief annuleren. In dit geval kunt u de uitvoering ervan geforceerd beëindigen. Als u de uitvoering van een thread geforceerd wilt beëindigen, kunt u in .NET Framework de Thread.Abort methode gebruiken. Deze methode haalt een ThreadAbortException op de thread op waarop deze wordt aangeroepen. Zie Threads vernietigen voor meer informatie. De Thread.Abort methode wordt niet ondersteund in .NET Core. Als u de uitvoering van code van derden geforceerd in .NET Core wilt beëindigen, voert u deze uit in het afzonderlijke proces en gebruikt u de Process.Kill methode.

De System.Threading.CancellationToken is niet beschikbaar voor .NET Framework 4. Als u een thread in oudere .NET Framework-versies wilt stoppen, gebruikt u de threadsynchronisatietechnieken om de coöperatieve annulering handmatig te implementeren. U kunt bijvoorbeeld het vluchtige booleaanse veld shouldStop maken en dit gebruiken om de code aan te vragen die door de thread wordt uitgevoerd om te stoppen. Voor meer informatie, zie volatile in de C#-verwijzing en System.Threading.Volatile.

Gebruik de Thread.Join methode om de aanroepende thread te laten wachten totdat de beëindigde thread stopt.

Procedure: Een thread pauzeren of onderbreken

U gebruikt de Thread.Sleep methode om de huidige thread gedurende een opgegeven tijd te onderbreken. U kunt een geblokkeerde thread onderbreken door de Thread.Interrupt methode aan te roepen. Zie Pauzeren en onderbreken van threads voor meer informatie.

Threadeigenschappen

In de Thread volgende tabel ziet u enkele eigenschappen:

Vastgoed Beschrijving
IsAlive Retourneert true als een thread is gestart en nog niet op normale wijze is beëindigd of afgebroken.
IsBackground Hiermee wordt een Booleaanse waarde opgehaald of ingesteld die aangeeft of een thread een achtergrondthread is. Achtergrondthreads zijn net als voorgrondthreads. Een achtergrondthread voorkomt echter niet dat een proces wordt gestopt. Zodra alle voorgrondthreads die deel uitmaken van een proces zijn gestopt, beëindigt de algemene taalruntime het proces door de Abort methode aan te roepen op achtergrondthreads die nog actief zijn. Zie Voorgrond- en achtergrondthreads voor meer informatie.
Name Hiermee haalt u de naam van een thread op of stelt u deze in. Wordt meestal gebruikt om afzonderlijke threads te ontdekken wanneer u fouten opspoort.
Priority Bepaalt een ThreadPriority waarde die door het besturingssysteem wordt gebruikt om prioriteit te geven aan draadplanning. Zie Planningsthreads en de ThreadPriority verwijzing voor meer informatie.
ThreadState Hiermee haalt u een ThreadState waarde op die de huidige statussen van een thread bevat.

Zie ook