Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Con .NET è possibile scrivere applicazioni che eseguono più operazioni contemporaneamente. Le operazioni che hanno il potenziale di rallentare altre operazioni possono essere eseguite su thread separati, un processo noto come multithreading o free threading.
Le applicazioni che usano il multithreading sono più reattive all'input dell'utente perché l'interfaccia utente rimane attiva perché le attività a elevato utilizzo del processore vengono eseguite su thread separati. Il multithreading è utile anche quando si creano applicazioni scalabili perché è possibile aggiungere thread man mano che aumenta il carico di lavoro.
Annotazioni
Se è necessario un maggiore controllo sul comportamento dei thread dell'applicazione, è possibile gestire manualmente i thread. Tuttavia, la programmazione multithreading è notevolmente semplificata con le classi System.Threading.Tasks.Parallel e System.Threading.Tasks.Task, Parallel LINQ (PLINQ), le classi di raccolta concorrenti nello spazio dei nomi System.Collections.Concurrent e un modello di programmazione basato sul concetto di attività anziché sui thread. Per altre informazioni, vedere Parallel Programming and Task Parallel Library (TPL).
Procedura: Creare e avviare un nuovo thread
Creare un nuovo thread creando una nuova istanza della System.Threading.Thread classe . Specificare il nome del metodo da eseguire nel nuovo thread al costruttore. Per avviare un thread creato, chiamare il Thread.Start metodo . Per altre informazioni ed esempi, vedere l'articolo Creazione di thread e passaggio di dati all'avvio e la sezione di riferimento delle API Thread.
Come fermare un thread
Per terminare l'esecuzione di un thread, usare .System.Threading.CancellationToken Fornisce una maniera unificata per arrestare i thread cooperativamente. Per altre informazioni, vedere Annullamento nei thread gestiti.
A volte non è possibile arrestare un thread in modo cooperativo perché esegue codice di terze parti non progettato per l'annullamento cooperativo. In questo caso, potrebbe essere necessario terminare l'esecuzione forzatamente. Per terminare l'esecuzione di un thread forzatamente, in .NET Framework è possibile usare il Thread.Abort metodo . Questo metodo genera un oggetto ThreadAbortException sul thread in cui viene richiamato. Per altre informazioni, vedere Eliminazione di thread. Il Thread.Abort metodo non è supportato in .NET Core. Se è necessario terminare l'esecuzione di codice di terze parti forzatamente in .NET Core, eseguirla nel processo separato e usare il Process.Kill metodo .
Il System.Threading.CancellationToken non è disponibile prima di .NET Framework 4. Per arrestare un thread nelle versioni precedenti di .NET Framework, usare le tecniche di sincronizzazione dei thread per implementare manualmente l'annullamento cooperativo. Ad esempio, è possibile creare il campo shouldStop
booleano volatile e usarlo per richiedere il codice eseguito dal thread per arrestarlo. Per altre informazioni, vedere Volatile in Riferimenti per C# e System.Threading.Volatile.
Usare il Thread.Join metodo per fare in modo che il thread chiamante attenda la terminazione del thread arrestato.
Procedura: Sospendere o interrompere un thread
Usare il Thread.Sleep metodo per sospendere il thread corrente per un periodo di tempo specificato. È possibile interrompere un thread bloccato chiamando il Thread.Interrupt metodo . Per altre informazioni, vedere Sospensione e interruzione dei thread.
Proprietà del thread
La tabella seguente presenta alcune delle Thread proprietà:
Proprietà | Descrizione |
---|---|
IsAlive | Restituisce true se un thread è stato avviato e non è stato ancora terminato normalmente o interrotto. |
IsBackground | Ottiene o imposta un valore Booleano che indica se un thread è in background. I thread in background sono simili ai thread in primo piano. Tuttavia, un thread in background non impedisce l'arresto di un processo. Una volta arrestati tutti i thread in primo piano che appartengono a un processo, Common Language Runtime termina il processo chiamando il Abort metodo sui thread in background ancora attivi. Per ulteriori informazioni, vedere Thread di primo piano e in background. |
Name | Ottiene o imposta il nome di un thread. Usato più di frequente per individuare singoli thread durante il debug. |
Priority | Ottiene o imposta un ThreadPriority valore utilizzato dal sistema operativo per assegnare priorità alla pianificazione dei thread. Per ulteriori informazioni, vedere Pianificazione dei thread e il riferimento ThreadPriority. |
ThreadState | Ottiene un ThreadState valore contenente gli stati correnti di un thread. |