Sobes.tech
Middle

Was ist der Synchronisierungskontext in C#?

sobes.tech KI

Antwort von AI

Der SynchronizationContext in C# bietet eine Abstraktion für die Thread-Dispatchierung, die es ermöglicht, Delegates in einem bestimmten Kontext auszuführen. Er spielt eine Schlüsselrolle bei der Verwaltung von GUI-Threads (z.B. WinForms, WPF) und ASP.NET, indem er eine korrekte Aktualisierung der UI-Elemente oder die Ausführung von Logik im entsprechenden Thread sicherstellt.

Hauptfunktionen:

  • Send(SendOrPostCallback d, object state): Führt einen Delegate synchron im Kontext aus. Der aufrufende Thread wird blockiert, bis der Delegate abgeschlossen ist.
  • Post(SendOrPostCallback d, object state): Führt einen Delegate asynchron im Kontext aus. Der aufrufende Thread wird nicht blockiert.

Anwendungsbeispiele:

  • In WPF oder WinForms repräsentiert SynchronizationContext.Current den UI-Thread. Die Verwendung von Post oder Send ermöglicht eine sichere Aktualisierung der UI-Elemente aus einem Hintergrund-Thread.
  • In ASP.NET Core ist SynchronizationContext standardmäßig nicht vorhanden, und Anfragen werden direkt an Threads aus dem Pool gesendet. In älteren Versionen von ASP.NET gab es einen Synchronisationskontext, der die Ausführung der Anfragen im selben Kontext gewährleistete.
// Beispiel für die Verwendung in WinForms zur Aktualisierung der UI aus einem Hintergrund-Thread
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // Erhalt des UI-Thread-Kontexts

    Task.Run(() =>
    {
        // Ausführung einer langwierigen Operation im Hintergrund-Thread
        Thread.Sleep(2000);

        // Aktualisierung des Labels über den Synchronisationskontext
        uiContext.Post(_ => label1.Text = "Aktualisiert!", null);
    });
}