[C#] Automate Control.InvokeRequired Code pattern
Blog นี้จริงๆ แล้วเป็นการนำ Blog ที่เขียนค้างตอนปี 2014 (ช่วงที่อยู่กับ Project ที่ได้ แต่บ่น 555) มาเขียนต่อให้จบครับ แม้ว่าตอนนี้แนวทางการพัฒนาระบบเป็นแนว Web Application แล้ว แต่ยังมีงานบางส่วนที่ยังเป็น Desktop Application ครับ ปัญหา เวลาจัดการงานด้าน UI มักจะเจอปัญหาที่เจอประจำเลย InvalidOperationException Cross-thread operation not valid. Control accessed from a thread other than the thread it was created on. สาเหตุ เกิดจากตัว Control ของ WinForms ไม่เป็น Thread-Safe ครับ ทางแก้ไข มี 2 แบบครับ BackgroundWorker: ให้ Main Thread แอบสั่งทำงานแบบ Asynchronous ผ่าน Method dowork Invoke method: delegated จาก Main Thread ให้มาทำส่วนที่ต้องการแทนครับ คราวนี้ เราจะมา Focus เฉพาะในส่วนของ Invoke method Invoke method การใช้งานง่ายมาครับ มี Pattern ดังนี้ครับ ตัวอย่าง ปัญหาที่พบ Code ในเคสที่ต้อง delegated จาก Method InvokeRequired() มันเหมือนกันเลยครับ !!!! จะว่าไปมันก็ขัดกับหลัก DRY (don’t repeat yourself) ครับ แนวทางแก้ไข -…