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 ve stavu dat, na která položka mezipaměti závisí.
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 ChangeMonitor se 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 ve stavu dat, na které položka mezipaměti závisí. Položka může být například soubor nebo datová entita, jejíž obsah je uložen v mezipaměti. Pokud se soubor nebo datová entita aktualizuje, musí se také změnit 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), další položka mezipaměti a soubory a atributy souboru.
Změna závislosti je změna stavu závislosti. V typické implementaci mezipaměti jakmile ChangeMonitor instance upozorní mezipaměť, ž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 tak, aby monitorovaly změny 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 zkoumá změny, ke kterým dochází mimo mezipaměť, a pak upozorní mezipaměť, že došlo ke změnám.
.NET Framework obsahuje následující třídy odvozené od třídy ChangeMonitor:
Každá z těchto tříd funguje 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 volání InitializationComplete() metody před vrácením metody. Pokud konstruktor při vytváření dojde k chybě a musí muset 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 inicializací je dokončena, konstruktor musí před voláním metody volat OnChanged(Object) metodu InitializationComplete() .
Po vytvoření instance odvozeného ChangeMonitor typu je nutné vložit monitorování do vlastní ObjectCache implementace. Nebo pokud jste dokončili používání monitorování změn, zavolejte metodu Dispose .
ChangeMonitor Po vložení instance do ObjectCache implementace ObjectCache instance vyžaduje, aby monitorování změn bylo uvolněno. 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 musí ObjectCache implementace volat NotifyOnChanged(OnChangedCallback), předáním objektu OnChangedCallback . Metodu NotifyOnChanged(OnChangedCallback) lze volat pouze jednou. Pokud už došlo ke změně závislosti, OnChangedCallback bude instance volána okamžitě po NotifyOnChanged(OnChangedCallback) volání. OnChangedCallback V opačném případě bude instance volána pouze jednou. K tomuto jednorázovému volání dojde buď při OnChanged(Object) volání metody, protože ChangeMonitor instance zjistila změnu, nebo když Dispose() je volána metoda na ChangeMonitor, podle toho, co nastane dříve.
Instance OnChangedCallback , která je poskytována ObjectCache implementací, by měla odebrat přidruženou položku mezipaměti a určit důvod pomocí výčtu DependencyChanged .
Instance ChangeMonitor může metodu OnChanged(Object) volat buď předtím, než implementace mezipaměti volá NotifyOnChanged(OnChangedCallback) metodu nebo po. OnChanged(Object) Pokud je volána metoda 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é bude předáno okamžitě NotifyOnChanged(OnChangedCallback) při NotifyOnChanged(OnChangedCallback) vyvolání. Všechna stavová data předaná OnChanged(Object) metodě se uloží monitorováním změn a následně předá 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 pro odstranění ChangeMonitor instance. Pravidla volání Dispose jsou následující:
Před vložením položky do mezipaměti je odpovědností volajícího odstranit ChangeMonitor instanci.
Jakmile se položka mezipaměti a ChangeMonitor instance, které jsou k ní přidružené, předají do mezipaměti, implementátor mezipaměti se musí ujistit, že Dispose je volána metoda, i když se vložení nezdaří.
Po předání položky a přidružených ChangeMonitor instancí do mezipaměti volající nesmí likvidovat závislost, protože když Dispose je volána metoda, volání je považováno za to, jako by se závislost změnila. V důsledku toho OnChanged(Object) se metoda automaticky vyvolá.
Při zohlednění těchto pravidel je nutné metodu Dispose volat jedním z následujících způsobů:
Uživatelé musí zavolat Dispose() přetížení metody, pokud se rozhodnou, že nevloží odvozenou instanci sledování změn do mezipaměti.
Pokud se implementace pokusí vložit instanci sledování změn do mezipaměti objektů, ale vložení selže, implementace mezipaměti je zodpovědná za volání Dispose() přetížení. Když 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 poté, co volá zpětné volání, které je registrováno prostřednictvím NotifyOnChanged(OnChangedCallback).
Poznámka: Toto automatické volání metody Dispose během aktivaci 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í), InitializationComplete() metoda automaticky odstraní monitorování změn.
- Vlastnost HasChanged je nastavena po
trueOnChanged(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
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
| HasChanged |
Získá hodnotu, která označuje, že stav monitorovaný ChangeMonitor třídou se změnil. |
| IsDisposed |
Získá hodnotu, která označuje, že odvozená instance ChangeMonitor třídy je uvolněna. |
| UniqueId |
Získá hodnotu, která představuje ChangeMonitor instanci třídy. |
Metody
| Name | Description |
|---|---|
| Dispose() |
Uvolní všechny prostředky, které používají aktuální instance 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 sledování změn. |
| Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| InitializationComplete() |
Volána z konstruktoru odvozených tříd k označení, že inicializace je dokončena. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| NotifyOnChanged(OnChangedCallback) |
Volání implementátorů mezipaměti k registraci zpětného volání a upozorňovat ObjectCache instanci prostřednictvím delegáta OnChangedCallback , když se závislost změnila. |
| OnChanged(Object) |
Volá se odvozenými třídami pro 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.