ChangeMonitor Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje základní třídu pro odvozený vlastní typ, který monitoruje změny stavu dat, na kterých závisí položka mezipaměti.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- Dědičnost
-
ChangeMonitor
- Odvozené
- Implementuje
Poznámky
Třída se ChangeMonitor používá jako základní třída pro odvozené třídy monitorování, které jsou specializované pro konkrétní implementace mezipaměti. Instance ChangeMonitor monitoruje změny stavu dat, na kterých závisí položka mezipaměti. Položka může být například soubor nebo datová entita, jejichž obsah je uložen v mezipaměti. Pokud se soubor nebo datová entita aktualizuje, musí se změnit také přidružená položka mezipaměti. Mezi běžné položky, které je možné monitorovat, patří datové entity (například databázová pole, hodnoty, řádky nebo tabulky), jiná položka mezipaměti a soubory a atributy souborů.
Změna závislosti je změna stavu závislosti. V typické implementaci mezipaměti poté ChangeMonitor , co instance oznámí mezipaměti, že se změnila závislost, mezipaměť provede požadovanou akci, například zneplatnění položky vložené mezipaměti.
Odvozené ChangeMonitor třídy lze přizpůsobit pro monitorování změn závislostí pro konkrétní různá úložiště dat. Existují například implementace mezipaměti pro systém souborů, fyzickou paměť nebo databázi. Třída ChangeMonitor prozkoumá změny, ke kterým dochází mimo mezipaměť, a poté upozorní mezipaměť, že došlo ke změnám.
Rozhraní .NET Framework obsahuje následující třídy, které jsou odvozeny z ChangeMonitor třídy :
Každá z těchto tříd pracuje s různými typy závislostí. Odvozená FileChangeMonitor třída například monitoruje změny mezipaměti pro data systému souborů (soubory a složky), na které položka mezipaměti závisí.
Poznámky pro implementátory
Pokud vytvoříte vlastní implementaci mezipaměti nebo odvozený typ monitorování změn, musíte postupovat podle určitých pokynů. Následující seznam shrnuje tyto pokyny. Další informace najdete v dokumentaci k jednotlivým metodám nebo vlastnostem.
Konstruktor odvozené třídy musí nastavit UniqueId vlastnost, zahájit monitorování a volat InitializationComplete() metodu před vrácením metody. Pokud konstruktor narazí na chybu během konstrukce a musí odstranit prostředky, konstruktor může volat Dispose přetížení pouze po InitializationComplete() volání metody, protože Dispose přetížení vyvolá InvalidOperationException výjimku, pokud inicializace není dokončena.
Pokud dojde ke změnám v datech, která jsou monitorována před dokončením inicializace, musí konstruktor volat metodu OnChanged(Object) před voláním InitializationComplete() metody.
Po vytvoření instance odvozeného ChangeMonitor typu je nutné vložit monitorování do vlastní ObjectCache implementace. Nebo pokud jste s používáním monitorování změn skončili, zavolejte metodu Dispose .
ChangeMonitor Po vložení instance do ObjectCache implementace ObjectCache vyžaduje instance, aby byl odstraněn monitor změn. I když je vložení neplatné a způsobí výjimku, ObjectCache implementace musí volat Dispose přetížení.
Po vložení odvozeného monitorování změn do mezipaměti ObjectCache musí implementace volat NotifyOnChanged(OnChangedCallback), předáním objektu OnChangedCallback . Metodu NotifyOnChanged(OnChangedCallback) lze volat pouze jednou. Pokud již došlo ke změně závislosti, OnChangedCallback bude instance volána okamžitě při NotifyOnChanged(OnChangedCallback) volání. V opačném OnChangedCallback případě bude instance volána pouze jednou. K tomuto jednorázovému volání dochází buď při OnChanged(Object) volání metody, protože ChangeMonitor instance zjistila změnu, nebo při Dispose() volání metody na ChangeMonitor, podle toho, co nastane dříve.
Instance OnChangedCallback , která je poskytována implementací ObjectCache , by měla odebrat přidruženou položku mezipaměti a zadat důvod pomocí výčtu DependencyChanged .
Instance ChangeMonitor může volat metodu OnChanged(Object) buď před voláním NotifyOnChanged(OnChangedCallback) metody implementace mezipaměti, nebo po. OnChanged(Object) Pokud je metoda volána před NotifyOnChanged(OnChangedCallback) voláním, základní ChangeMonitor implementace oznámí mezipaměti, že k tomu došlo, a aktivuje zpětné volání, které má být předáno NotifyOnChanged(OnChangedCallback) okamžitě při NotifyOnChanged(OnChangedCallback) vyvolání. Všechna data stavu, která jsou předána OnChanged(Object) metodě, jsou uložena monitorováním změn a následně předána NotifyOnChanged(OnChangedCallback) metodě při NotifyOnChanged(OnChangedCallback) vyvolání metody.
Monitorování změn musí implementovat metodu Dispose(Boolean) . Další informace najdete v dokumentaci k Dispose(Boolean) metodě.
Přetížení Dispose() metody musí být volána k odstranění ChangeMonitor instance. Pravidla pro volání Dispose jsou následující:
Před vložením položky do mezipaměti je volající zodpovědný za odstranění ChangeMonitor instance.
Jakmile jsou položky mezipaměti a ChangeMonitor instance, které jsou k ní přidruženy, předány do mezipaměti, musí implementátor mezipaměti zajistit, že Dispose je volána metoda, i když vložení selže.
Po předání položky a jejích přidružených ChangeMonitor instancí do mezipaměti volající nesmí odstranit závislost, protože při Dispose volání metody se s voláním zachází, jako by se závislost změnila. V důsledku toho OnChanged(Object) se automaticky vyvolá metoda .
S ohledem na Dispose tato pravidla musí být metoda volána jedním z následujících způsobů:
Uživatelé musí volat Dispose() přetížení metody, pokud se rozhodnou nevkládat odvozenou instanci change-monitor do mezipaměti.
Pokud se implementace pokusí vložit instanci change-monitor do mezipaměti objektů, ale vložení selže, implementace mezipaměti je zodpovědná za volání Dispose() přetížení. Pokud pokus o vložení způsobí výjimku, implementace mezipaměti musí odstranit všechny přidružené závislosti.
Pokud je položka mezipaměti odebrána, implementace mezipaměti musí také odstranit závislost.
Interní implementace OnChanged(Object) metody automaticky volá metodu Dispose po volání zpětného volání, které je registrováno prostřednictvím NotifyOnChanged(OnChangedCallback).
Poznámka: Toto automatické volání metody dispose během aktivace události nastane pouze v případě, že inicializace ChangeMonitor instance byla dříve dokončena.
Když konstruktor odvozeného monitorování změn volá metodu InitializationComplete() , pokud se stav monitorování změn již změnil (tj. stav, který je monitorován již změněn, když byl konstruktor stále aktivní), metoda InitializationComplete() automaticky odstraní monitorování změn.
- Vlastnost HasChanged je nastavena na
true
po OnChanged(Object) volání metody odvozené change-monitor instance, bez ohledu na to, zda OnChangedCallback byl objekt nastaven voláním NotifyOnChanged(OnChangedCallback) metody nebo ne.
Konstruktory
ChangeMonitor() |
Inicializuje novou instanci ChangeMonitor třídy . Tento konstruktor je volána z konstruktorů v odvozených třídách k inicializaci základní třídy. |
Vlastnosti
HasChanged |
Získá hodnotu, která označuje, že stav, který je monitorován ChangeMonitor pomocí třídy změněna. |
IsDisposed |
Získá hodnotu, která označuje, že odvozená ChangeMonitor instance třídy je odstraněna. |
UniqueId |
Získá hodnotu, která představuje ChangeMonitor instanci třídy. |
Metody
Dispose() |
Uvolní všechny prostředky, které jsou používány aktuální instancí ChangeMonitor třídy . |
Dispose(Boolean) |
Uvolní všechny spravované a nespravované prostředky a všechny odkazy na ChangeMonitor instanci. Toto přetížení musí být implementováno odvozenými třídami change-monitor. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
InitializationComplete() |
Volána z konstruktoru odvozených tříd k označení, že inicializace byla dokončena. |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
NotifyOnChanged(OnChangedCallback) |
Volání implementátory mezipaměti zaregistrovat zpětné volání a oznámit ObjectCache instanci prostřednictvím delegáta OnChangedCallback při změně závislosti. |
OnChanged(Object) |
Volána odvozenými třídami k vyvolání události při změně závislosti. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Platí pro
Bezpečný přístup z více vláken
Tento typ je bezpečný pro přístup z více vláken.