Middle
Co je to synchronizační kontext v C#?
sobes.tech AI
Odpověď od AI
V C# poskytuje SynchronizationContext abstrakci pro dispatchování práce na vlákna, což umožňuje spouštět delegáty v určitém kontextu. Hraje klíčovou roli při správě GUI vláken (například WinForms, WPF) a ASP.NET, zajišťuje správné aktualizace prvků rozhraní nebo provádění logiky ve správném vlákně.
Hlavní funkce:
Send(SendOrPostCallback d, object state): Synchronně vykoná delegáta v kontextu. Volající vlákno je zablokováno do dokončení delegáty.Post(SendOrPostCallback d, object state): Asynchronně vykoná delegáta v kontextu. Volající vlákno není blokováno.
Příklady použití:
- V WPF nebo WinForms,
SynchronizationContext.Currentbude představovat UI vlákno. PoužitíPostneboSendumožňuje bezpečně aktualizovat prvky rozhraní z pozadí vlákna. - V ASP.NET Core, ve výchozím nastavení,
SynchronizationContextneexistuje a požadavky jsou přímo předávány vláknům z poolu. Ve starších verzích ASP.NET existoval kontext synchronizace, který zajišťoval provádění požadavků ve stejném kontextu.
// Příklad použití ve WinForms pro aktualizaci UI z pozadí
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Získání kontextu UI
Task.Run(() =>
{
// Provedení dlouhé operace na pozadí
Thread.Sleep(2000);
// Aktualizace štítku přes kontext synchronizace
uiContext.Post(_ => label1.Text = "Aktualizováno!", null);
});
}