Gunakan BackgroundWorker untuk menghantar mesej tak segerak
Apabila butang ditekan untuk menghantar mesej, program melambatkan dan membeku Dalam kes ini, menggunakan BackgroundWorker ialah penyelesaian yang ideal. Ia membenarkan pelaksanaan tak segerak, memastikan tindak balas program walaupun semasa penghantaran mesej. Begini cara menggunakannya:
Ganti kod dalam pengendali butang dengan:
<code>backgroundWorker1.RunWorkerAsync();</code>
Dalam pengendali acara backgroundWorker1_DoWork, letakkan kod yang bertanggungjawab untuk menghantar mesej. Ini memastikan bahawa operasi ini dilakukan dalam urutan latar belakang, membolehkan program terus berjalan dengan lancar.
Untuk mengemas kini elemen UI (seperti bar kemajuan), gunakan pengendali acara backgroundWorker1_ProgressChanged. Acara ini disegerakkan dengan urutan UI, membenarkan interaksi yang selamat.
Dalam pengendali acara backgroundWorker1_RunWorkerCompleted, anda boleh mengendalikan penyiapan operasi penghantaran mesej (jika perlu).
Berikut ialah contoh:
<code>public Form1() { InitializeComponent(); backgroundWorker1.DoWork += backgroundWorker1_DoWork; backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged; backgroundWorker1.WorkerReportsProgress = true; } private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { // 模擬耗時操作 for (int i = 0; i < 100; i++) { // 發送訊息的程式碼 System.Threading.Thread.Sleep(100); // 模擬延遲 ((BackgroundWorker)sender).ReportProgress(i); } } private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { // 更新 UI 元素 progressBar1.Value = e.ProgressPercentage; } private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { // 處理訊息發送完成 MessageBox.Show("訊息發送完成!"); }</code>
Atas ialah kandungan terperinci Bagaimanakah BackgroundWorker Menyelesaikan Pembekuan UI Semasa Penghantaran Mesej Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!