Esporta (0) Stampa
Espandi tutto

Classe Dispatcher

Aggiornamento: Luglio 2008

Fornisce servizi per la gestione della coda di elementi di lavoro per un thread.

Spazio dei nomi:  System.Windows.Threading
Assembly:  WindowsBase (in WindowsBase.dll)

public sealed class Dispatcher
public final class Dispatcher
public final class Dispatcher
Impossibile creare direttamente un'istanza di questa classe in XAML.

Dispatcher gestisce una coda con priorità di elementi di lavoro per un thread specifico.

Quando si crea un oggetto Dispatcher è su un thread, questo diviene il solo oggetto Dispatcher che è possibile associare al thread, anche se Dispatcher è arrestato.

Se si tenta di ottenere CurrentDispatcher per il thread corrente e al thread non è associato Dispatcher, verrà creato un oggetto Dispatcher.

Se Dispatcher è arrestato, non può essere riavviato.

In WPF è possibile accedere a DispatcherObject solo per l'oggetto Dispatcher a esso associato. Ad esempio, un thread in background non può aggiornare il contenuto di un oggetto Button associato a Dispatcher sul thread della interfaccia utente. Per poter accedere alla proprietà Content di Button, il thread in background deve delegare l'operazione all'oggetto Dispatcher associato al thread della interfaccia utente. Questa operazione viene eseguita utilizzando Invoke o BeginInvoke. Invoke è sincrono e BeginInvoke è asincrono. L'operazione viene aggiunta alla coda di Dispatcher con la priorità stabilita dall'oggetto DispatcherPriority specificato.

Se viene chiamato BeginInvoke su un oggetto Dispatcher arrestato, la proprietà di stato dell'oggetto DispatcherOperation restituito verrà impostata su Aborted.

Tutti i metodi di Dispatcher, fatta eccezione per DisableProcessing sono a thread libero.

Gli oggetti che derivano da DispatcherObject hanno affinità di thread.

Gli oggetti che derivano da Freezable sono a thread libero quando sono bloccati. Per ulteriori informazioni, vedere Cenni preliminari sugli oggetti Freezable.

Nell'esempio seguente viene illustrato come inserire un'operazione in Dispatcher. Per il codice sorgente completo di questo esempio, vedere Esempio di applicazione a thread singolo con calcolo di lunga durata.

In primo luogo viene creato un delegato che non accetta argomenti.

public delegate void NextPrimeDelegate();


Quindi viene chiamato BeginInvoke(DispatcherPriority, Delegate). Questa chiamata a BeginInvoke(DispatcherPriority, Delegate) accetta due parametri: la priorità, impostata su DispatcherPriority.Normal e il callback, passato tramite un'istanza del delegato NextPrimeDelegate.

startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));


System.Object
  System.Windows.Threading.Dispatcher

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Windows Vista

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft