Exportieren (0) Drucken
Alle erweitern

Dispatcher-Klasse

Aktualisiert: Juli 2008

Stellt Dienste zum Verwalten der Warteschlange von Arbeitsaufgaben für einen Thread bereit.

Namespace:  System.Windows.Threading
Assembly:  WindowsBase (in WindowsBase.dll)

public sealed class Dispatcher
public final class Dispatcher
public final class Dispatcher
Sie können eine Instanz dieser Klasse nicht direkt in XAML erstellen.

Der Dispatcher verwaltet für einen bestimmten Thread eine priorisierte Warteschlange von Arbeitsaufgaben.

Wenn ein Dispatcher für einen Thread erstellt wird, wird dieser zum einzigen Dispatcher, der dem betreffenden Thread zugeordnet werden kann, selbst dann, wenn der Dispatcher beendet wird.

Wenn Sie versuchen, den CurrentDispatcher für den aktuellen Thread abzurufen, und dem Thread kein Dispatcher zugeordnet ist, wird ein Dispatcher erstellt.

Wenn ein Dispatcher beendet wird, kann er nicht neu gestartet werden.

In WPF kann auf ein DispatcherObject nur von dem Dispatcher aus zugegriffen werden, dem es zugeordnet ist. Ein Hintergrundthread kann beispielsweise nicht den Inhalt eines Button aktualisieren, der dem Dispatcher des Benutzeroberfläche-Thread zugeordnet ist. Um im Hintergrundthread auf die Content-Eigenschaft des Button zugreifen zu können, muss der Hintergrundthread die Arbeit an den Dispatcher delegieren, der dem Benutzeroberfläche-Thread zugeordnet ist. Dies erreichen Sie entweder mit Invoke oder mit BeginInvoke. Invoke ist synchron und BeginInvoke ist asynchron. Die Operation wird mit der angegebenen DispatcherPriority in die Warteschlange des Dispatcher eingefügt.

Wenn BeginInvoke für einen beendeten Dispatcher aufgerufen wird, wird die Statuseigenschaft der zurückgegebenen DispatcherOperation auf Aborted festgelegt.

Alle Methoden von Dispatcher, mit Ausnahme von DisableProcessing, sind Freethreadmethoden.

Von DispatcherObject abgeleitete Objekte verfügen über Threadaffinität.

Von Freezable abgeleitete Objekte sind Freethreadobjekte, wenn sie fixiert werden. Weitere Informationen finden Sie unter Übersicht über Freezable-Objekte.

Im folgenden Beispiel wird gezeigt, wie eine Operation in einem Dispatcher platziert wird. Den vollständigen Quellcode für dieses Beispiel finden Sie unter Beispiel für eine Singlethread-Anwendung mit Berechnung mit langer Laufzeit.

Zuerst wird ein Delegat erstellt, der keine Argumente erwartet.

public delegate void NextPrimeDelegate();


Anschließend wird BeginInvoke(DispatcherPriority, Delegate) aufgerufen. Bei diesem Aufruf von BeginInvoke(DispatcherPriority, Delegate) werden zwei Parameter übergeben: die Priorität, die auf DispatcherPriority.Normal festgelegt wird, und der Rückruf, der durch eine Instanz des Delegaten NextPrimeDelegate übergeben wird.

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


System.Object
  System.Windows.Threading.Dispatcher

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft