Threads en threading gebruiken
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.
Notitie
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 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 System.Threading.Tasks.Task 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 het begintijd en de Thread API-verwijzing voor meer informatie en voorbeelden.
Procedure: Een thread stoppen
Als u de uitvoering van een thread wilt beëindigen, gebruikt u de System.Threading.CancellationToken. Het biedt een uniforme 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. Zie vluchtig in C#-verwijzing en System.Threading.Volatilevoor meer informatie.
Gebruik de Thread.Join methode om de aanroepende thread te laten wachten tot de beëindiging van de thread is gestopt.
Procedure: Een thread onderbreken 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 Threads onderbreken en onderbreken voor meer informatie.
Threadeigenschappen
In de Thread volgende tabel ziet u enkele eigenschappen:
Eigenschappen | Beschrijving |
---|---|
IsAlive | Retourneert true als een thread is gestart en nog niet normaal 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. Meestal gebruikt om afzonderlijke threads te detecteren wanneer u fouten opssport. |
Priority | Hiermee haalt u een ThreadPriority waarde op die door het besturingssysteem wordt gebruikt om prioriteit te geven aan threadplanning. 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. |