หัวข้อ
หัวข้อเธรด UI และการประมวลผลตามรอบเวลา
หน้ารวมหัวข้อที่ช่วยให้เรียกดู WPF / WinForms, เธรด UI, async/await, Dispatcher และการเลือกตัวจับเวลาได้ในที่เดียว
เหตุใดหัวข้อนี้จึงมักติดขัด
ใน WPF / WinForms ทันทีที่การทำงานแบบอะซิงโครนัส การอัปเดตอินเทอร์เฟซ และการประมวลผลตามรอบเวลาปะปนกัน จะมองเห็นได้ยากว่า อะไรกำลังทำงานอยู่บนเธรดใด หัวข้อนี้เป็นจุดรวมสำหรับติดตามทั้งอาการอินเทอร์เฟซค้าง การอัปเดตข้ามเธรด และข้อสงสัยเรื่องตัวจับเวลาไปพร้อมกัน
- หลังจาก
awaitแล้ว ยากที่จะรู้ว่าการทำงานจะกลับไปที่ใด - การประมวลผลที่ควรทำงานบนอินเทอร์เฟซกับที่ควรไปอยู่เบื้องหลังปะปนกัน
- ความรับผิดชอบของ
DispatcherTimer,System.Threading.TimerและPeriodicTimerไม่ชัดเจน - มองหารูปแบบที่ดูแลรักษาง่ายสำหรับ WinForms / WPF ได้ยาก
ประเด็นที่พบบ่อยในการปรึกษา
- ยังมี
.Result/.Wait()หลงเหลืออยู่ ทำให้หน้าจอค้างได้ง่าย - ขอบเขตระหว่าง
Task.Runกับการอัปเดตอินเทอร์เฟซไม่ชัดเจน - การเขียนโปรแกรมสำหรับการทำงานตามรอบเวลากระจัดกระจาย ก่อให้เกิดการเลื่อนของรอบเวลาและการทำงานซ้ำซ้อน
- ต้องการลดการพึ่งพาเธรด UI โดยไม่ทำลายความรับผิดชอบของหน้าจอ
แนวทางที่แนะนำ
ในทางปฏิบัติ การจัดระเบียบ เธรด UI และการประมวลผลตามรอบเวลาไปด้วยกัน ได้ผลมากกว่าการศึกษาเฉพาะ async / await หรือเฉพาะตัวจับเวลาแยกกัน บทความที่เกี่ยวข้องและหน้าบริการจะช่วยให้ตัดสินใจได้ว่าควรเริ่มจากการออกแบบหรือจากการแก้ไขการเขียนโปรแกรม
ติดต่อเรา
หากหน้านี้ตรงกับสถานการณ์ของคุณ โปรดเล่าบริบทปัจจุบันและความช่วยเหลือที่ต้องการให้เราทราบ