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.Currentde UI-thread. Het gebruik vanPostofSendmaakt het mogelijk om interface-elementen veilig bij te werken vanuit een achtergrondthread. - In ASP.NET Core bestaat
SynchronizationContextstandaard 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);
});
}