2009-08-01 79 views
1

我正在爲一個程序編寫一個插件,我需要跟蹤何時在活動文檔中添加,刪除和編輯本機對象。該API具有編輯文檔時觸發的事件。但是,程序不會跟蹤本機對象實際更改的時間。而是將對象更改視爲要刪除的對象,然後立即用具有相同ID的另一個修改對象替換。這樣做是爲了讓程序可以跟蹤撤消記錄。如何追蹤何時發生多個事件?

一些嘗試,我確定事件引起,具體如下:

將對象添加: OnAddObject事件

一個對象被刪除: OnDeleteObject事件

對象被更改: OnReplaceObject事件 - > OnDeleteObject事件 - > OnAddObject事件

現在,我的插件只能觀看OnAdd和OnDelete事件,它正在向集合中添加和刪除自定義對象的實例。但是這也意味着每次對象更改時,我的插件都會刪除重新初始化一個幾乎相同的對象。我寧願知道文檔對象已經改變,所以我的自定義對象可以刷新,而不是完全重新實例化。

我的訂閱OnDelete和OnAdd事件的方法如何告訴對象沒有真的被添加或刪除,而是因爲它已經被更換而被替換?

回答

0

我建議引入「鎖定」的變量(例如布爾變量)

在所更換的事件觸發時,將它們設置爲鎖定

在添加和刪除檢查鎖定變量。如果它們被設置爲鎖定,則將它們設置爲解鎖並返回。

+0

我想這是不可能的,因爲添加/刪除事件在替換事件之前觸發。 – Zyphrax 2009-08-02 09:30:24

0

跟蹤文檔ID。

0

由於原始程序的不良事件結構,這有點困難。也許你可以把被刪除的項目的id與當前時間一起放入字典中。

這樣你就可以創建單獨的線程來檢查字典的內容(當它包含項目時)。爲每個項目添加幾毫秒(比較字典中的DateTime),以便添加事件以便確定它是常規刪除還是替換。

這有點低效,因爲你必須放慢你的刪除幾毫秒。但我想不出更好的辦法。

+0

複雜的方式 – 2009-08-01 22:47:18