Utilizzo di thread e threadingUsing threads and threading

Con .NET è possibile scrivere applicazioni in grado di eseguire più operazioni contemporaneamente.With .NET, you can write applications that perform multiple operations at the same time. Le operazioni potenzialmente in grado di compromettere altre operazioni possono essere eseguite su thread separati, un processo noto con il nome di multithreading o threading Free.Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

Le applicazioni che usano il multithreading sono più reattive all'input dell'utente poiché l'interfaccia utente rimane attiva mentre le attività che richiedono un uso intensivo del processore vengono eseguite su thread separati.Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. Il multithreading è utile anche durante la creazione di applicazioni scalabili poiché consente di aggiungere thread man mano che aumenta il carico di lavoro.Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

Nota

Nel caso sia necessario un maggiore controllo sul comportamento dei thread dell'applicazione, è possibile gestirli personalmente.If you need more control over the behavior of the application's threads, you can manage the threads yourself. Tuttavia, a partire da .NET Framework 4, la programmazione multithreading è notevolmente semplificata con le classi System.Threading.Tasks.Parallel e System.Threading.Tasks.Task, Parallel LINQ (PLINQ), le nuove classi di raccolta simultanee nello spazio dei nomi System.Collections.Concurrent e un nuovo modello di programmazione che si basa sul concetto di attività anziché di thread.However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. Per altre informazioni, vedere Programmazione parallela e Task Parallel Library (TPL).For more information, see Parallel Programming and Task Parallel Library (TPL).

Procedura: Creare e avviare un nuovo threadHow to: Create and start a new thread

Per creare un nuovo thread, creare una nuova istanza della classe System.Threading.Thread e fornire al costruttore il nome del metodo che si vuole eseguire in un nuovo thread.You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. Per avviare un thread creato, chiamare il metodo Thread.Start.To start a created thread, call the Thread.Start method. Per altre informazioni ed esempi, vedere l'articolo Creazione di thread e passaggio di dati all'avvio e il riferimento API Thread.For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

Procedura: Arrestare un threadHow to: Stop a thread

Per terminare l'esecuzione di un thread, usare il metodo Thread.Abort.To terminate the execution of a thread, use the Thread.Abort method. Questo metodo genera un oggetto ThreadAbortException nel thread in cui viene richiamato.That method raises a ThreadAbortException on the thread on which it's invoked. Per altre informazioni, vedere Eliminazione definitiva di thread.For more information, see Destroying threads.

A partire da .NET Framework 4, è possibile usare l'oggetto System.Threading.CancellationToken per annullare un thread in modo cooperativo.Beginning with the .NET Framework 4, you can use the System.Threading.CancellationToken to cancel a thread cooperatively. Per altre informazioni, vedere Annullamento in thread gestiti.For more information, see Cancellation in managed threads.

Usare il metodo Thread.Join per fare in modo che il thread chiamante attenda l'interruzione del thread in cui il metodo viene richiamato.Use the Thread.Join method to make the calling thread wait for the termination of the thread on which the method is invoked.

Procedura: Sospendere o interrompere un threadHow to: Pause or interrupt a thread

È possibile usare il metodo Thread.Sleep per sospendere il thread corrente per un periodo di tempo specificato.You use the Thread.Sleep method to pause the current thread for a specified amount of time. È possibile interrompere un thread bloccato chiamando il metodo Thread.Interrupt.You can interrupt a blocked thread by calling the Thread.Interrupt method. Per altre informazioni, vedere Sospensione e interruzione di thread.For more information, see Pausing and interrupting threads.

Proprietà del threadThread properties

La tabella seguente illustra alcune delle proprietà dell'oggetto Thread:The following table presents some of the Thread properties:

ProprietàProperty DescriptionDescription
IsAlive Restituisce true se il thread è stato avviato, ma non è stato ancora terminato normalmente o è stato interrotto.Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground Ottiene o imposta un valore booleano che indica se un thread è un thread in background.Gets or sets a Boolean that indicates if a thread is a background thread. I thread in background sono simili ai thread in primo piano, ma un thread in background non impedisce l'arresto di un processo.Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. Dopo l'arresto di tutti i thread in primo piano che appartengono a un processo, Common Language Runtime termina il processo chiamando il metodo Abort nei thread in background ancora attivi.Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. Per altre informazioni, vedere Thread in primo piano e in background.For more information, see Foreground and Background Threads.
Name Ottiene o imposta il nome del thread.Gets or sets the name of a thread. Usato in genere per individuare i singoli thread durante il debug.Most frequently used to discover individual threads when you debug.
Priority Ottiene o imposta un valore ThreadPriority che viene usato dal sistema operativo per definire le priorità di pianificazione dei thread.Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. Per altre informazioni, vedere Pianificazione di thread e il riferimento ThreadPriority.For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState Ottiene un valore ThreadState contenente gli stati correnti di un thread.Gets a ThreadState value containing the current states of a thread.

Vedere ancheSee also