.NET Framework
Synchronisierungskontexte
Suche…
Bemerkungen
Ein Synchronisierungskontext ist eine Abstraktion, die es dem Benutzer ermöglicht, Code zu verwenden, um Arbeitseinheiten an einen Scheduler zu übergeben, ohne sich dessen bewusst zu sein, wie die Arbeit geplant wird.
Synchronisierungskontexte werden normalerweise verwendet, um sicherzustellen, dass Code in einem bestimmten Thread ausgeführt wird. In WPF- und Winforms-Anwendungen wird vom Präsentations-Framework ein SynchronizationContext
bereitgestellt, der den UI-Thread darstellt. Auf diese Weise kann SynchronizationContext
als Erzeuger-Konsument-Muster für Delegierte betrachtet werden. Ein Arbeiter - Thread erzeugen , ausführbaren Code (der Delegierten) und oder den Verbrauch von der UI Nachrichtenschleife Warteschlange.
Die Task Parallel Library bietet Funktionen zum automatischen Erfassen und Verwenden von Synchronisationskontexten.
Führen Sie den Code im UI-Thread aus, nachdem Sie die Hintergrundarbeit ausgeführt haben
In diesem Beispiel wird veranschaulicht, wie eine UI-Komponente mithilfe eines SynchronizationContext
von einem Hintergrund-Thread aktualisiert wird
void Button_Click(object sender, EventArgs args)
{
SynchronizationContext context = SynchronizationContext.Current;
Task.Run(() =>
{
for(int i = 0; i < 10; i++)
{
Thread.Sleep(500); //simulate work being done
context.Post(ShowProgress, "Work complete on item " + i);
}
}
}
void UpdateCallback(object state)
{
// UI can be safely updated as this method is only called from the UI thread
this.MyTextBox.Text = state as string;
}
Wenn Sie in diesem Beispiel versucht haben, MyTextBox.Text
direkt in der for
Schleife zu aktualisieren, erhalten Sie einen Thread-Fehler. Durch das Posten der UpdateCallback
Aktion im SynchronizationContext
wird das Textfeld in demselben Thread wie der Rest der Benutzeroberfläche aktualisiert.
In der Praxis sollten Fortschrittsaktualisierungen mithilfe einer Instanz von System.IProgress<T>
. Die Standardimplementierung System.Progress<T>
erfasst automatisch den Synchronisationskontext, für den sie erstellt wird.