Middle
Kas yra sinchronizacijos kontekstas C#?
sobes.tech AI
Atsakymas iš AI
SynchronizationContext C# suteikia abstrakciją, leidžiančią paskirstyti darbą tarp gijų, leidžiant vykdyti delegatus tam tikrame kontekste. Jis atlieka svarbų vaidmenį GUI gijų (pvz., WinForms, WPF) ir ASP.NET valdyme, užtikrindamas teisingą sąsajos elementų atnaujinimą arba logikos vykdymą atitinkamoje gijoje.
Pagrindinės funkcijos:
Send(SendOrPostCallback d, object state): Sinchroniškai vykdo delegatą kontekste. Iškviečianti gija yra blokuojama iki delegato užbaigimo.Post(SendOrPostCallback d, object state): Asinchroniškai vykdo delegatą kontekste. Iškviečianti gija nėra blokuojama.
Naudojimo pavyzdžiai:
- WPF ar WinForms,
SynchronizationContext.Currentatstovaus UI giją. NaudojantPostarbaSend, galima saugiai atnaujinti sąsajos elementus iš foninės gijos. - ASP.NET Core, pagal numatytuosius nustatymus,
SynchronizationContextneegzistuoja, ir užklausos tiesiogiai patenka į pool gijas. Senesnėse ASP.NET versijose egzistavo sinchronizacijos kontekstas, užtikrinantis užklausų vykdymą toje pačioje kontekste.
// Pavyzdys WinForms, kaip atnaujinti UI iš foninės gijos
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // Gauti UI kontekstą
Task.Run(() =>
{
// Ilgai trunkančios operacijos vykdymas foninėje gijoje
Thread.Sleep(2000);
// Etiketės atnaujinimas per sinchronizacijos kontekstą
uiContext.Post(_ => label1.Text = "Atnaujinta!", null);
});
}