Middle
Маъз чӣ гуна аст контексти ҳамоҳангсозӣ дар C#?
sobes.tech AI
Ҷавоб аз AI
C# тилида SynchronizationContext иш парчагларини бошқариш учун абстракция беради ва делегатларни белгиланган контекстда ишга тушириш имконини беради. У GUI иш парчаглари (масалан, WinForms, WPF) ва ASP.NETда асосий роль ўйнайди, интерфейс элементларининг тўғри янгиланиши ёки логикани тегишли иш парчагида бажарилишини таъминлайди.
Асосий функциялар:
Send(SendOrPostCallback d, object state): Синхрон равишда делегатни контекстда бажаради. Чақирувчи иш парчаги делегат тугашигача блокланади.Post(SendOrPostCallback d, object state): Асинхрон равишда делегатни контекстда бажаради. Чақирувчи иш парчаги блокланмайди.
Ишлатиш мисоллари:
- WPF ёки WinFormsда,
SynchronizationContext.CurrentUI иш парчагини ифода қилади.PostёкиSendдан фойдаланиш орқали фон иш парчагидан интерфейс элементларини хавфсиз янгилаш мумкин. - ASP.NET Coreда, стандарт ҳолда,
SynchronizationContextмавжуд эмас ва сўровлар тўғридан-тўғри пул иш парчагларига келади. Эски версияларида, сўровларни бир хил контекстда бажаришни таъминлайдиган синхронлаштириш контексти мавжуд эди.
// WinFormsда фон иш парчагидан UIни янгилаш мисоли
private void button1_Click(object sender, EventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current; // UI контекстни олиш
Task.Run(() =>
{
// Узоқ давом этувчи операцияни фон иш парчагида бажариш
Thread.Sleep(2000);
// Синхронлаштириш контексти орқали белгини янгилаш
uiContext.Post(_ => label1.Text = "Янгиланди!", null);
});
}