Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah SynchronizationContext Memastikan Kemas Kini UI Selamat Benang dalam .NET?
SynchronizationContext menyediakan cara untuk melaksanakan kod dalam konteks atau lokasi tertentu. Ia berfungsi dengan menangkap perwakilan yang dihantar kepada kaedah Hantar atau Hantarnya dan menggunakan mereka dalam konteks itu.
Konteks Penyegerakan ialah kelas yang wujud dalam setiap urutan dan boleh ditetapkan melalui Konteks Penyegerakan.SetSynchronizationContext atau diakses melalui SynchronizationContext.Current. Walau bagaimanapun, perlu diingat bahawa SynchronizationContext tidak semestinya mewakili urutan tertentu dan boleh mewakilkan seruan kepada pelbagai utas atau malah hos jauh.
Dalam Windows Forms, WindowsFormsSynchronizationContext dipasang pada utas UI apabila borang pertama adalah dicipta. Konteks ini memastikan bahawa perwakilan yang dihantar ke Hantar atau Kirim digunakan pada urutan UI, yang penting untuk memanipulasi kawalan Borang Windows.
Kod sampel yang disediakan menunjukkan cara menggunakan SynchronizationContext untuk memanipulasi kawalan UI daripada yang berasingan benang:
SynchronizationContext originalContext = SynchronizationContext.Current; ThreadPool.QueueUserWorkItem(delegate { string text = File.ReadAllText(@"c:\temp\log.txt"); originalContext.Post(delegate { myTextBox.Text = text; }, null); });
Dalam Borang Windows, mengakses kawalan UI daripada urutan selain yang menciptanya adalah dilarang. Oleh itu, menggunakan SynchronizationContext untuk beralih kembali kepada urutan UI adalah penting untuk mengelakkan pengecualian apabila memanipulasi elemen UI daripada urutan lain.
Sejak .NET 4.5, async / await digabungkan dengan Task Perpustakaan Selari (TPL) boleh memudahkan proses melaksanakan kod dalam konteks tertentu. API ini secara automatik menangkap Konteks Penyegerakan urutan UI dan beralih semula kepadanya apabila perlu.
Atas ialah kandungan terperinci Bagaimanakah SynchronizationContext Memastikan Kemas Kini UI Selamat Benang dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!