Dalam aplikasi multi -threaded, kemas kini elemen antara muka pengguna (GUI) mesti dilakukan dalam penciptaan benang mereka. Cuba untuk mengubahnya secara langsung dari benang lain yang boleh menyebabkan tingkah laku yang tidak normal dan tidak dapat diramalkan. Untuk menyelesaikan masalah ini, terdapat beberapa cara untuk mengemas kini GUI dari thread non -UI dengan selamat.
Gunakan komisen untuk memanggil
Salah satu kaedah langsung yang paling mudah ialah menggunakan panggilan yang ditugaskan. Ini melibatkan kaedah "🎜> Invoke yang menghantar kaedah kemas kini GUI yang ditentukan ke elemen GUI. Suruhanjaya kemudian akan melakukan operasi kemas kini pada benang yang betul.
Contoh:
Dengan mengandaikan bahawa terdapat label pada satu tetingkap, anda perlu mengemas kini dengan status semasa tugas yang diproses dalam benang lain.Dalam contoh ini,
Invokekaedah ini digunakan untuk melaksanakan aman untuk menetapkan teks label pada benang UI. Kaedah ini membolehkan dengan selamat mengemas kini GUI dari thread non -UI.
// 在工作线程上运行 string newText = "abc"; form.Label.Invoke((MethodInvoker)delegate { // 在UI线程上运行 form.Label.Text = newText; }); // 返回工作线程
Harus diingat bahawa Invoke
akan menyekat pelaksanaan sehingga operasi selesai. Ini bermakna jika operasi kemas kini memerlukan banyak masa, menggunakanInvoke boleh menyebabkan masalah penyegerakan. Oleh itu, ia harus digunakan secara selektif untuk mengemas kini atau menggunakannya dengan teknologi tak segerak.
Atas ialah kandungan terperinci Bagaimanakah saya dapat mengemas kini elemen GUI dengan selamat dari benang bukan UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!