ChangeMonitor 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供衍生之自訂型別的基底類別,這個型別會監控快取項目所依存之資料的狀態變更。
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- 繼承
-
ChangeMonitor
- 衍生
- 實作
備註
類別 ChangeMonitor 會作為衍生監視類別的基類,這些類別是針對特定快取實作特製化的。 ChangeMonitor實例會監視快取專案相依之資料狀態的變更。 例如,專案可以是快取內容的檔案或資料實體。 如果檔案或資料實體已更新,也必須變更相關聯的快取專案。 可監視的一般專案包括 (資料實體,例如資料庫欄位、值、資料列或資料表) 、另一個快取專案,以及檔案和檔案屬性。
相依性變更是相依性狀態的變更。 在典型的快取實作中,在 實例通知快取相依性已變更之後 ChangeMonitor ,快取會執行必要的動作,例如使插入的快取專案失效。
ChangeMonitor您可以自訂衍生類別,以監視特定不同資料存放區的相依性變更。 例如,檔案系統、實體記憶體或資料庫都有快取實作。 類別 ChangeMonitor 會檢查快取外部發生的變更,然後警示快取發生變更。
.NET Framework包含衍生自 ChangeMonitor 類別的下列類別:
這些類別中的每一個都會與不同類型的相依性搭配運作。 例如,衍生 FileChangeMonitor 類別會監視檔案系統資料的快取變更, (檔案和資料夾) 快取專案相依。
給實施者的注意事項
如果您建立自訂快取實作或衍生的變更監視器類型,您必須遵循特定指導方針。 下列清單摘要說明這些指導方針。 如需詳細資訊,請參閱個別方法或屬性的檔。
衍生類別的建構函式必須在方法傳回之前,先設定 UniqueId 屬性、開始監視和呼叫 InitializationComplete() 方法。 如果建構函式在建構期間遇到錯誤,而且必須處置資源,則建構函式只能在呼叫 方法之後 InitializationComplete() 呼叫 Dispose 多載,因為在初始化未完成時, Dispose 多載會擲回 InvalidOperationException 例外狀況。
如果在初始化完成之前所監視的資料中發生變更,建構函式必須在呼叫 InitializationComplete() 方法之前呼叫 OnChanged(Object) 方法。
具現化衍生 ChangeMonitor 類型之後,您必須將監視器插入自訂 ObjectCache 實作中。 或者,如果您使用變更監視器完成,請呼叫 Dispose 方法。
ChangeMonitor將實例插入 ObjectCache 實作之後, ObjectCache 實例會要求處置變更監視器。 即使插入無效並造成例外狀況,實 ObjectCache 作仍必須呼叫 Dispose 多載。
將衍生變更監視器插入快取之後, ObjectCache 實作必須藉由傳遞 OnChangedCallback 物件來呼叫 NotifyOnChanged(OnChangedCallback) 。 NotifyOnChanged(OnChangedCallback)方法只能呼叫一次。 如果已經發生相依性變更, OnChangedCallback 則會在呼叫 時 NotifyOnChanged(OnChangedCallback) 立即呼叫 實例。 否則, OnChangedCallback 只會呼叫 實例一次。 呼叫 方法時 OnChanged(Object) 發生這個一次呼叫,因為 ChangeMonitor 實例偵測到變更,或在 上 ChangeMonitor 呼叫 方法時 Dispose() ,不論第一次發生。
OnChangedCallback實作所提供的 ObjectCache 實例應該移除相關聯的快取專案,並使用 DependencyChanged 列舉來指定原因。
ChangeMonitor實例可以在快取實作呼叫 NotifyOnChanged(OnChangedCallback) 方法之前或之後呼叫 OnChanged(Object) 方法。 OnChanged(Object)如果在呼叫之前 NotifyOnChanged(OnChangedCallback) 呼叫 方法,基底 ChangeMonitor 實作會通知快取發生此情況,並且會在叫用 時 NotifyOnChanged(OnChangedCallback) 觸發要立即傳遞的 NotifyOnChanged(OnChangedCallback) 回呼。 任何傳遞至 OnChanged(Object) 方法的狀態資料都會由變更監視器儲存,並在叫用 方法時 NotifyOnChanged(OnChangedCallback) 接著傳遞至 NotifyOnChanged(OnChangedCallback) 方法。
變更監視器必須實作 Dispose(Boolean) 方法。 如需詳細資訊,請參閱 Dispose(Boolean) 方法的文件。
Dispose()必須呼叫 方法多載,才能處置 ChangeMonitor 實例。 呼叫 Dispose 的規則如下所示:
將專案插入快取之前,呼叫者必須負責處置 ChangeMonitor 實例。
一旦快取專案和 ChangeMonitor 與其相關聯的實例傳遞至快取,快取實作器就必須確定 Dispose 呼叫 方法,即使插入失敗也一樣。
將專案及其相關聯的 ChangeMonitor 實例傳遞至快取之後,呼叫端不得處置相依性,因為呼叫 方法時 Dispose ,呼叫會視為相依性已變更。 因此, OnChanged(Object) 系統會自動叫用 方法。
考慮這些規則時, Dispose 必須以下列其中一種方式呼叫 方法:
如果使用者決定不要將衍生的變更監視器實例插入快取中,則必須呼叫 Dispose() 方法多載。
如果實作嘗試將變更監視器實例插入物件快取,但插入失敗,快取實作會負責呼叫 Dispose() 多載。 當插入嘗試造成例外狀況時,快取實作必須處置任何相關聯的相依性。
如果移除快取專案,快取實作也必須處置相依性。
方法的內部實作 OnChanged(Object) 會在呼叫透過 NotifyOnChanged(OnChangedCallback) 註冊的回呼之後自動呼叫 Dispose 方法。
注意:只有在先前完成實例的初始化 ChangeMonitor 時,才會在引發事件期間自動呼叫 dispose 方法。
當衍生變更監視器的建構函式呼叫 InitializationComplete() 方法時,如果變更監視器的狀態已經變更 (也就是說,當建構函式仍在使用中時監視的狀態已經變更) ,則 InitializationComplete() 方法會自動處置變更監視器。
-
HasChanged屬性會在衍生的變更監視器實例呼叫 方法之後 OnChanged(Object) 設定為
true
,而不論 OnChangedCallback 物件是否已由方法的呼叫 NotifyOnChanged(OnChangedCallback) 所設定。
建構函式
ChangeMonitor() |
初始化 ChangeMonitor 類別的新執行個體。 這個建構函式由衍生類別中的建構函式呼叫,來初始化基底類別。 |
屬性
HasChanged |
取得值,這個值表示 ChangeMonitor 類別所監控的狀態已變更。 |
IsDisposed |
取得值,這個值表示是否已經處置 ChangeMonitor 類別的衍生執行個體。 |
UniqueId |
取得值,這個值表示 ChangeMonitor 類別執行個體。 |
方法
Dispose() |
將 ChangeMonitor 類別的目前執行個體所使用的資源全部釋出。 |
Dispose(Boolean) |
釋放所有的 Managed 資源和 Unmanaged 資源,以及對 ChangeMonitor 執行個體的所有參考。 這項多載必須由衍生自變更監控的類別實作。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
InitializationComplete() |
從衍生類別的建構函式進行呼叫,以指出初始化已經完成。 |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
NotifyOnChanged(OnChangedCallback) |
在相依性變更時,由快取實作呼叫來註冊回呼,並透過 ObjectCache 委派通知 OnChangedCallback 執行個體。 |
OnChanged(Object) |
在相依性變更時由衍生類別呼叫,以引發事件。 |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |
適用於
執行緒安全性
此型別具備執行緒安全。