Bazen kullanıcı yürütülmesi biraz zaman alan genişletilmiş bir teknik işlem başlatır. Bu durumlarda, şu anda hangi görevin yürütüldüğüne ilişkin bilgilerle birlikte, bir tür ilerleme çubuğu görüntülemek genellikle iyidir.
Kullanıcı arayüzünün ve mantık katmanlarının birbirine bağlanmasını önlemek için iletişimin bir tür proxy üzerinden gerçekleşmesi genellikle en iyisidir. Yani, arka uç kendi UI öğelerini manipüle etmemeli, hatta ara katmanla doğrudan etkileşime girmemelidir.
Açıkçası, bu işi yapabilmek için bir yerde bir geri arama olmalı. Genellikle iki yoldan biriyle uyguladım:
Değişken bir nesneyi arka uca iletin ve arka ucun ilerledikçe nesnede değişiklik yapmasını sağlayın. Bir değişiklik meydana geldiğinde nesne ön uca bildirir.
Formun
void f(ProgressObject)
veyaProgressObject -> unit
arka ucun çağırdığı bir geri arama işlevini iletme. Bu durumda, arka uç oluştururProgressObject
ve tamamen pasiftir. Her ilerlemeyi rapor etmek istediğinde yeni bir nesne inşa etmesi gerektiğini düşünüyorum.
Bu yöntemlerin dezavantajları ve avantajları nelerdir? Üzerinde anlaşmaya varılmış en iyi yöntem var mı? Kullanımları için farklı koşullar var mı?
Göz ardı ettiğim ilerlemeyi bildirmek için tamamen farklı teknikler var mı?
BackgroundWorker
RH söz ettiği. "İlerleme formu" vb. İle birlikte özel bir sınıfa sarılır ve BackgroundWorker
tasarımın ayrı bir iş parçacığında çalıştığı gibi bir istisnayı iletmek için basit bir mekanizma . Özelliklerini .Net tarafından önerilen bir şekilde kullandığımız sürece bunun deyimsel olduğu söylenebilir. Ve herhangi bir dil / çerçeve bağlamında "deyimsel" en iyisi olabilir.