ความแตกต่างคืออะไรbetween System.Windows.Forms.Timer()
และSystem.Windows.Threading.DispatcherTimer()
? เราควรใช้ในกรณีใด แนวทางปฏิบัติที่ดีที่สุด?
ความแตกต่างคืออะไรbetween System.Windows.Forms.Timer()
และSystem.Windows.Threading.DispatcherTimer()
? เราควรใช้ในกรณีใด แนวทางปฏิบัติที่ดีที่สุด?
คำตอบ:
Windows.Forms.Timer
ใช้หน้าต่างข้อความวนรอบเพื่อประมวลผลเหตุการณ์ตัวจับเวลา ควรใช้เมื่อเขียนเหตุการณ์เวลาที่ใช้ในแอปพลิเคชัน Windows Forms และคุณต้องการให้ตัวจับเวลาเริ่มทำงานบนเธรด UI หลัก
DispatcherTimer
คือกลไกการจับเวลา WPF ควรใช้เมื่อคุณต้องการจัดการเวลาในลักษณะที่คล้ายกัน (แม้ว่าจะไม่ จำกัด เฉพาะเธรดเดียว - แต่ละเธรดมีตัวเลือกจ่ายงานของตัวเอง) และคุณกำลังใช้ WPF เหตุการณ์จะเริ่มทำงานในเธรดเดียวกับ Dispatcher
โดยทั่วไปWPF == DispatcherTimer
และWindows Forms == Forms.Timer
.
ที่ถูกกล่าวว่านอกจากนี้ยังมีSystem.Threading.Timer
ซึ่งเป็นตัวจับเวลาclass
ที่ยิงบนเธรดแยกต่างหาก นี่เป็นสิ่งที่ดีสำหรับการกำหนดเวลาที่เป็นตัวเลขล้วนๆโดยที่คุณไม่ได้พยายามอัปเดต UI เป็นต้น
ฉันพบบทความดีๆเกี่ยวกับตัวจับเวลาพร้อมตัวอย่างเล็ก ๆ ที่นี่: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
บทสรุป:
หาก DoSomething () จัดการกับส่วนประกอบ GUI จากนั้นคุณต้องใช้ Timer ด้วย: this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} เนื่องจากคุณไม่สามารถเข้าถึงการควบคุม GUI จากเธรดอื่นได้โดยตรงด้วย DispatcherTimer ที่คุณทำ ไม่จำเป็นต้องทำเช่นนั้น
หาก DoSomething () ทำงานเป็นงานที่ใช้เวลานาน GUI จะหยุดทำงานในกรณีของ DispatcherTimer ในกรณีของ Timer จะไม่ใช้เนื่องจากมีการดำเนินการ Methos แบบยาวในเธรดอื่น