Sobes.tech
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.Current bude predstavovať UI vlákno. Použitie Post alebo Send umožňuje bezpečne aktualizovať prvky rozhrania z pozadia.
  • V ASP.NET Core, štandardne, SynchronizationContext neexistuje 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);
    });
}