2011-01-11 41 views
0

我想知道在WinForm中定義事件處理程序的正確方法是什麼。我這樣問,因爲我有一個應用程序,只有一些事件處理程序內部有邏輯,而其他的只是調用其他地方定義的方法。這是好嗎?,我有點擔心,因爲也許是一個壞的設計,在給定的時刻它會給我麻煩。讓內部密集邏輯的事件處理程序是不好的模式?什麼是Windows窗體中事件處理程序的常見設計模式

+0

這是預期的設計。 Windows是一個事件驅動的環境。您必須執行代碼的唯一可能位置是響應用戶啓動的事件。這不是一個固有的壞模式。還有其他選擇,但在不瞭解更多關於您正在執行的特定邏輯的情況下,提出合理的建議是不可能的(也爲時過早)。 – 2011-01-12 00:34:07

回答

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就是爲此而設計的。這並不容易,只有在需要解決實際問題的情況下才能使用。不要假設任何事情。

相關問題