Sobes.tech
Middle

Mis on sünkroniseerimiskontekst C#-s

sobes.tech AI

Vastus AI-lt

Sünkroniseerimiskontekst (SynchronizationContext) C#-s pakub abstraktsiooni tööde suunamiseks niitidel, võimaldades täita delekaate kindlas kontekstis. See mängib võtmerolli GUI-niitide (näiteks WinForms, WPF) ja ASP.NET-i juhtimisel, tagades kasutajaliidese elementide õige uuendamise või loogika täitmise sobivas niidis.

Peamised funktsioonid:

  • Send(SendOrPostCallback d, object state): Täidab sünkronselt delekaadi kontekstis. Kutsuva niit blokeeritakse kuni delekaadi täitmiseni.
  • Post(SendOrPostCallback d, object state): Täidab asünkroonselt delekaadi kontekstis. Kutsuv niit ei blokeeru.

Kasutusnäited:

  • WPF või WinForms-is esindab SynchronizationContext.Current UI-niiti. Post või Send kasutamine võimaldab turvaliselt uuendada kasutajaliidese elemente taustaniidilt.
  • ASP.NET Core-is puudub vaikimisi SynchronizationContext, ning päringud suunatakse otse niitidele pihust. Vanemates ASP.NET versioonides oli olemas sünkroniseerimiskontekst, mis tagas päringute täitmise samas kontekstis.
// Näide WinForms-is UI uuendamiseks taustaniidilt
private void button1_Click(object sender, EventArgs e)
{
    SynchronizationContext uiContext = SynchronizationContext.Current; // UI-niidi konteksti saamine

    Task.Run(() =>
    {
        // Pikk tegevus taustaniidil
        Thread.Sleep(2000);

        // Märkuse uuendamine sünkroniseerimiskonteksti kaudu
        uiContext.Post(_ => label1.Text = "Uuendatud!", null);
    });
}