Middle
Šta je kontekst sinhronizacije u C#?
sobes.tech АИ
Одговор од АИ
SynchronizationContext u C# pruža apstrakciju za dispatching rada na niti, omogućavajući izvršavanje delegata u određenom kontekstu. On igra ključnu ulogu u upravljanju GUI nitima (npr. WinForms, WPF) i ASP.NET, obezbeđujući ispravno ažuriranje elemenata interfejsa ili izvršavanje logike u odgovarajućoj niti.
Glavne funkcije:
Send(SendOrPostCallback d, object state): Sinhrono izvršava delegata u kontekstu. Nit koja poziva je blokirana do završetka delegata.Post(SendOrPostCallback d, object state): Asinhrono izvršava delegata u kontekstu. Nit koja poziva nije blokirana.
Primeri upotrebe:
- U WPF ili WinForms,
SynchronizationContext.Currentće predstavljati UI nit. KorišćenjePostiliSendomogućava sigurno ažuriranje elemenata interfejsa iz pozadinske niti. - U ASP.NET Core, po default-u,
SynchronizationContextne postoji, i zahtevi direktno dolaze na niti iz pool-a. U starijim verzijama ASP.NET, postojao je kontekst sinhronizacije koji je obezbeđivao izvršavanje zahteva u istom kontekstu.
// Primer korišćenja u WinForms za ažuriranje UI iz pozadinske niti
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Dobijanje UI konteksta
Task.Run(() =>
{
// Izvršavanje duže operacije u pozadinskoj niti
Thread.Sleep(2000);
// Ažuriranje oznake putem konteksta sinhronizacije
uiContext.Post(_ => label1.Text = "Ažurirano!", null);
});
}