Middle
Čo je to synchronizačný kontext v C#?
sobes.tech AI
Odpoveď od AI
SynchronizationContext v C# poskytuje abstrakciu pre dispatch práce na vlákna, čo umožňuje vykonávať delegáty v určitom kontexte. Hrá kľúčovú úlohu pri správe GUI vlákien (napríklad WinForms, WPF) a ASP.NET, zabezpečujúc správne aktualizácie prvkov rozhrania alebo vykonávanie logiky v príslušnom vlákne.
Hlavné funkcie:
Send(SendOrPostCallback d, object state): Synchronizovane vykoná delegáta v kontexte. Volajúce vlákno je zablokované do ukončenia delegáta.Post(SendOrPostCallback d, object state): Asynchrónne vykoná delegáta v kontexte. Volajúce vlákno nie je zablokované.
Príklady použitia:
- V WPF alebo WinForms,
SynchronizationContext.Currentbude predstavovať UI vlákno. PoužitiePostaleboSendumožňuje bezpečne aktualizovať prvky rozhrania z pozadia. - V ASP.NET Core, štandardne,
SynchronizationContextneexistuje a požiadavky prichádzajú priamo na vlákna z poolu. V starších verziách ASP.NET existoval kontext synchronizácie, ktorý zabezpečoval vykonávanie požiadaviek v rovnakom kontexte.
// Príklad použitia v WinForms na aktualizáciu UI z pozadia
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Získanie kontextu UI
Task.Run(() =>
{
// Vykonanie dlhodobej operácie na pozadí
Thread.Sleep(2000);
// Aktualizácia štítku cez kontext synchronizácie
uiContext.Post(_ => label1.Text = "Aktualizované!", null);
});
}