Sobes.tech
Middle

Wat is de synchronisatiecontext in C#?

sobes.tech AI

Antwoord van AI

De SynchronisatieContext (SynchronizationContext) in C# biedt een abstractie voor het dispatchen van werk naar threads, waardoor delegates in een bepaalde context kunnen worden uitgevoerd. Het speelt een sleutelrol bij het beheren van GUI-threads (bijvoorbeeld WinForms, WPF) en ASP.NET, door correcte updates van interface-elementen of het uitvoeren van logica op het juiste thread te garanderen.

Belangrijkste functies:

  • Send(SendOrPostCallback d, object state): Voert een delegate synchronisch uit in de context. De oproepende thread wordt geblokkeerd totdat de delegate klaar is.
  • Post(SendOrPostCallback d, object state): Voert een delegate asynchroon uit in de context. De oproepende thread wordt niet geblokkeerd.

Gebruik voorbeelden:

  • In WPF of WinForms vertegenwoordigt SynchronizationContext.Current de UI-thread. Het gebruik van Post of Send maakt het mogelijk om interface-elementen veilig bij te werken vanuit een achtergrondthread.
  • In ASP.NET Core bestaat SynchronizationContext standaard niet, en worden verzoeken direct afgehandeld door poolthreads. In oudere versies van ASP.NET was er een synchronisatiecontext die de uitvoering van verzoeken in dezelfde context garandeerde.
// Voorbeeld van gebruik in WinForms om de UI bij te werken vanuit een achtergrondthread
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // Verkrijg de UI-threadcontext

    Task.Run(() =>
    {
        // Voer een langdurige operatie uit op een achtergrondthread
        Thread.Sleep(2000);

        // Werk het label bij via de synchronisatiecontext
        uiContext.Post(_ => label1.Text = "Bijgewerkt!", null);
    });
}