บางครั้งผู้ใช้เริ่มการดำเนินการด้านเทคนิคเพิ่มเติมซึ่งใช้เวลาสักครู่ในการดำเนินการ ในกรณีเหล่านี้มักจะแสดงแถบความคืบหน้าพร้อมกับข้อมูลเกี่ยวกับงานที่กำลังดำเนินการอยู่ในขณะนี้
เพื่อหลีกเลี่ยงการมีเพศสัมพันธ์อย่างใกล้ชิดกับ UI และเลเยอร์ตรรกะมันเป็นการดีที่สุดที่จะเกิดการสื่อสารผ่านพร็อกซีบางประเภท นั่นคือแบ็คเอนด์ไม่ควรจัดการองค์ประกอบ UI ของตัวเองหรือแม้กระทั่งโต้ตอบกับเลเยอร์ตัวกลางโดยตรง
เห็นได้ชัดว่าจะต้องมีการโทรกลับบางแห่งเพื่อให้งานนี้ ฉันได้นำไปใช้โดยทั่วไปด้วยหนึ่งในสองวิธี:
ส่งผ่านวัตถุที่ไม่แน่นอนไปยังส่วนหลังและให้ส่วนหลังเปลี่ยนแปลงอยู่ระหว่างดำเนินการ วัตถุแจ้ง Front-end เมื่อมีการเปลี่ยนแปลงเกิดขึ้น
ผ่านฟังก์ชั่นโทรกลับของแบบฟอร์ม
void f(ProgressObject)
หรือProgressObject -> unit
ว่าส่วนหลังเรียกใช้ ในกรณีนี้ back-end สร้างProgressObject
และมันแฝงอย่างสมบูรณ์ มันจะต้องสร้างวัตถุใหม่ทุกครั้งที่ต้องการรายงานความคืบหน้าฉันถือว่า
ข้อเสียและข้อดีของวิธีการเหล่านี้คืออะไร? มีวิธีใช้ที่ดีที่สุดตามที่ตกลงกันไว้หรือไม่? มีสถานการณ์ที่แตกต่างกันสำหรับการใช้งานของพวกเขา?
มีเทคนิคที่แตกต่างอย่างสิ้นเชิงจากการรายงานความก้าวหน้าที่ฉันมองข้ามไปหรือไม่?
BackgroundWorker
RH ที่กล่าวถึง ห่อในคลาสที่กำหนดเองพร้อมกับ "แบบฟอร์มความคืบหน้า" ฯลฯ และกลไกที่ง่ายสำหรับการสื่อสารข้อยกเว้น - BackgroundWorker
ตามการออกแบบทำงานในเธรดแยกต่างหาก เท่าที่เราใช้คุณสมบัติของมันในวิธีที่แนะนำโดย. Net จากนั้นอาจกล่าวได้ว่าเป็นสำนวน และในบริบทของภาษา / กรอบที่กำหนด "สำนวน" อาจดีที่สุด