我想知道在WinForm中定義事件處理程序的正確方法是什麼。我這樣問,因爲我有一個應用程序,只有一些事件處理程序內部有邏輯,而其他的只是調用其他地方定義的方法。這是好嗎?,我有點擔心,因爲也許是一個壞的設計,在給定的時刻它會給我麻煩。讓內部密集邏輯的事件處理程序是不好的模式?什麼是Windows窗體中事件處理程序的常見設計模式
0
A
回答
0
事件處理程序的複雜邏輯在某些情況下不好,但並非總是如此。通常不好的事情是在處理程序中做很多工作來重新繪製數據網格或類似的會導致GUI閃爍的單元。你可以使這樣的處理程序異步。 只要你防禦再次出現crossthreadedoperationexceptions,就可以從事件處理程序中調用其他方法。 但是,您必須考慮您的架構需求並從那裏跳轉。
0
事件處理程序與密集邏輯裏面是一個壞模式?
如果你自己問這個問題:是的。可能會有一些例外,但UI事件處理程序中的代碼太多通常是不良設計的標誌。
你應該看看MVP(MVP-Passive View和MVP-Supervising控制器),甚至MVVM和MVC。這些是用於分離演示邏輯的最「着名」的設計模式。
就我個人而言,我更喜歡WinForms中的MVP-Passive View,但對此有很多意見。
1
在Winforms事件處理程序中,通常不會限制您的操作。但它有副作用,很容易看到你自己,如果你做了很多工作,然後用戶界面變得緊張。它不再響應鼠標點擊,它不再重繪自己。大約3秒後,Windows用標題欄中的「Not Responding」用ghost窗口替換表單。
您必須編寫大量代碼才能觸發該情況,一秒鐘超過4個機器指令。典型的UI凍結是由等待其他事情完成工作而引起的,例如dbase查詢。
這是醜陋的,並沒有給人留下很好的印象。並且可以讓使用你的用戶界面不舒服。用戶沒有迴應的按鈕就沒有什麼特別的了。你會使用工作線程來解決這個問題,BackGroundWorker就是爲此而設計的。這並不容易,只有在需要解決實際問題的情況下才能使用。不要假設任何事情。
相關問題
- 1. 什麼是任何Windows窗體應用程序最常見的設計模式?
- 2. 什麼是常見的Windows服務設計模式?
- 3. 使用Ember.js,處理鍵盤事件的一些常見模式是什麼?
- 4. 窗體事件處理模式
- 5. 處理事件的設計模式
- 6. Observer模式的常見錯誤處理機制是什麼?
- 7. 關於什麼事件我應該假設Windows窗體是可見的?
- 8. 設計模式 - 事件處理
- 9. C#Windows窗體的設計模式
- 10. 處理安裝程序中常見文件的常見/最佳方式是什麼?
- 11. 關閉模式彈出式窗口的事件處理程序
- 12. Windows窗體應用程序中未處理的異常
- 13. 是否可以在事件處理程序中關閉窗體,其中事件處理程序在類中?
- 14. 在窗體中處理多模式的設計建議
- 15. C++設計事件處理程序類
- 16. .NET Windows窗體事件觸發的順序是什麼?
- 17. Java,設計模式:多個事件源和一個事件處理程序
- 18. 從子窗體事件處理程序刷新窗體
- 19. 用於關閉Windows窗體應用程序的事件處理程序
- 20. 在.NET中找到Windows窗體控件的所有事件處理程序
- 21. 設計模式常見條件檢查
- 22. 處理同步變量的最佳設計模式是什麼?
- 23. 處理命令行參數的設計模式是什麼
- 24. Windows多窗體應用程序設計
- 25. WordPress的模塊/插件管理的設計模式是什麼?
- 26. 爲什麼這是jQuery事件處理程序中的窗口對象?
- 27. 窗體窗體事件處理
- 28. 在Windows窗體中爲控件使用通用事件處理程序!
- 29. 設計模式:異常/錯誤處理
- 30. 什麼是Java中的表單加載事件處理程序?
這是預期的設計。 Windows是一個事件驅動的環境。您必須執行代碼的唯一可能位置是響應用戶啓動的事件。這不是一個固有的壞模式。還有其他選擇,但在不瞭解更多關於您正在執行的特定邏輯的情況下,提出合理的建議是不可能的(也爲時過早)。 – 2011-01-12 00:34:07