2009-07-25 91 views
1

的Application.DoEvents方法我不是很熟悉,所以VB.NET,我不知道這是可能的...掛鉤在VB.NET中

一些代碼,我的工作是設置一個非常大的類的屬性。在每個屬性的setter中引發一個事件來指示類數據已更改。事件處理程序然後將該類的實例序列化到數據庫。

很顯然,我不希望每個屬性設置後,這種情況發生,所以我需要要麼有儲蓄,還是其他什麼東西之前的延遲。

我保持實例的大名單中的緩存實現了,所以一個選擇是隻處理緩存飄飛,並在高速緩存中保存所有未保存的情況下到數據庫。

所以我想看看我是否能得到從應用類(或重寫的DoEvents),但它是NotInheritable,所以沒有運氣。

任何想法?

+0

您的用例與計時器相關嗎? – 2009-07-25 10:16:00

回答

1

不清楚你是在討論windows消息泵還是.NET事件。無論哪種方式,有幾種常見的方法:

  • 更改發佈者,以便它只在引發一切事件時引發單個事件;例如,通過數據綁定到BindingList<T>,您可以在執行大更新時將RaiseListChangedEvents設置爲false,然後再設置爲true,並調用重置方法
  • 告訴目標禁用諸如繪製持續時間之類的內容;例如使用BeginEdit() /EndEdit()對方法
  • 如果既不是可能的:處理事件,但最好不要馬上做任何事情;只有當你相信沒有別的東西來時才做些事情;例如之前加入一個短暫的延遲,你做你的時髦的東西

最後的一個例子是在這裏:Prevent events from firing multiple times from single action

0

添加一個額外的字段到您的EventArgs類,上面寫着「處理」。然後,每個處理程序檢查此字段,並且只有在它爲假時纔會繼續。然後,一旦完成,它將字段設置爲True。

0

沒有「事件隊列」。

你問到這個問題,因爲有問題的,你見過,因爲你有一個關心的,還是?如果您詢問有關問題,請編輯您的問題以包含有關問題的詳細信息。如果您在詢問有關問題,請編輯該問題以包含您關心的一些信息。