2013-04-22 88 views
1

我是C#和WPF的新手。我剛剛在C#中學習了異步編程。 我們舉辦活動和一些我們趕上這個事件。我們應該什麼時候在C#中使用事件

這種方法的優點是我們不需要直接調用對象方法。例如我們從數據庫中加載數據,然後在加載數據方法完成後,引發事件LoadDataSuccessfully 然後主類捕獲該事件並引發事件UpdateGUIAfterLoadDataSuccessfully,其他控件將捕獲此事件並更新GUI。

但現在我想可能是......我在項目中使用它太多,可能是我過度使用它太多。 請給我一些建議,當我們應該使用事件,當我們應該做傳統的方式。

+4

我不認爲你真的可以過度使用一種方法,如果它服務於它的目的。事件和異步服務的目的是當您有可用的數據時採取行動,這非常有效。 – ericosg 2013-04-22 04:56:52

+3

並不是真的可以回答...但是對於評論:嘗試用其他機制來替換事件,並且看看你是否更喜歡其他版本,這樣你可以決定什麼更好(對於* your *項目中的* your *情況) 。 – 2013-04-22 04:58:55

+1

事件不是異步的。他們也是相當普遍的,我猜他們幾乎都有任何OOP語言,所以我也不會稱他們爲非傳統語言。至於何時使用它們 - 我認爲這是你從經驗中學到的東西。只要按照阿列克謝的建議。 – 2013-04-22 05:42:22

回答

3

如果不適合源自操作的代碼直接瞭解對該操作作出響應的代碼,則應使用事件。

讓用例的幫助說明

問題

在你的系統,你必須你說你有每分鐘50個數據對象發送從外部接收system.Upon這一點,你的數據對象發送需要由另一個對象進行處理。

在這種情況下,事件或簡單的方法調用會更好嗎?

回答

一方面,事件聽起來合適的位置,因爲它處理數據接收的代碼不應該依賴於它做了與上述數據代碼的執行。否則,數據接收代碼現在負責兩件事 - 接收數據委託其處理。

在另一方面,如果數據的具體處理是直接關係到採取行動的是由外部主叫用戶發送,可能更有意義,使它成爲一個函數調用

看看this

2

這裏有幾個評論/回答你上面寫的

「這種方法的優點是我們不需要直接調用對象方法。」 - 真實,但這並不意味着你應該事件的一切,並避免顯式方法調用。 Kyle提供的例子是一個很好的例子。另外 - 看看默認情況下.NET中如何使用事件 - 它們只用於異步事件(鼠標點擊,鼠標懸停等)

「示例我們從數據庫加載數據,然後在加載數據方法完成後,它引發事件LoadDataSuccessfully然後主類捕獲這個事件並引發事件UpdateGUIAfterLoadDataSuccessfully,其他一些控件將捕獲這個事件並更新GUI。「 - 如果數據需要不時刷新,我只會用這種方法,但甚至不知道這一點。使用事件來加載數據是很常見的,不會像你在這裏描述的那樣。請注意,你寫的意味着你有一個線程用於加載數據,另一個用於GUI ...

「我在項目中使用它太多了,可能是我過度使用它太多了。」 - 你對此可能是正確的。

相關問題