Kadang-kadang pengguna memulai operasi teknis tambahan yang membutuhkan waktu untuk dijalankan. Dalam kasus ini, biasanya baik untuk menampilkan semacam progress bar, bersama dengan informasi tentang tugas yang sedang dijalankan saat ini.
Untuk menghindari kopling erat antara UI dan lapisan logika, biasanya yang terbaik adalah membuat komunikasi terjadi melalui beberapa jenis proxy. Artinya, back-end tidak boleh memanipulasi elemen UI sendiri, atau bahkan berinteraksi dengan lapisan perantara secara langsung.
Jelas, harus ada beberapa panggilan balik di suatu tempat untuk membuat pekerjaan ini. Saya biasanya menerapkannya dalam satu dari dua cara:
Berikan objek yang dapat diubah ke back-end, dan mintalah back-end untuk mengubahnya pada progres. Objek memberi tahu front-end ketika perubahan terjadi.
Lewati fungsi panggil balik formulir
void f(ProgressObject)
atauProgressObject -> unit
yang dipanggil kembali . Dalam hal ini, back-end membangunProgressObject
dan itu benar-benar pasif. Saya pikir itu harus membangun objek baru setiap kali ingin melaporkan kemajuan.
Apa kekurangan dan kelebihan dari metode ini? Apakah ada metode terbaik yang disepakati untuk digunakan? Apakah ada keadaan yang berbeda untuk penggunaannya?
Apakah ada teknik pelaporan kemajuan yang sama sekali berbeda yang saya abaikan?
BackgroundWorker
RH itu menyebutkan. Dibungkus dalam kelas khusus bersama dengan "formulir kemajuan", dll. Dan mekanisme sederhana untuk mengkomunikasikan pengecualian - sebagaimana BackgroundWorker
desain berjalan di utas terpisah. Sejauh kita menggunakan fitur-fiturnya dengan cara yang disarankan oleh .Net maka itu bisa dikatakan idiomatis. Dan dalam konteks bahasa / kerangka kerja tertentu "idiomatik" mungkin yang terbaik.