Freigeben über


ChangeMonitor Klasse

Definition

Stellt eine Basisklasse für einen abgeleiteten benutzerdefinierten Typ bereit, der Änderungen am Status der Daten überwacht, von denen ein Cacheelement abhängt.

public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
    interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
Vererbung
ChangeMonitor
Abgeleitet
Implementiert

Hinweise

Die ChangeMonitor Klasse wird als Basisklasse für abgeleitete Monitorklassen verwendet, die auf bestimmte Cacheimplementierungen spezialisiert sind. Eine ChangeMonitor Instanz überwacht Änderungen am Status der Daten, von denen ein Cacheelement abhängt. Das Element kann z. B. eine Datei- oder Datenentität sein, deren Inhalt zwischengespeichert wird. Wenn die Datei- oder Datenentität aktualisiert wird, muss auch der zugeordnete Cacheeintrag geändert werden. Allgemeine Elemente, die überwacht werden können, umfassen Datenentitäten (z. B. Datenbankfelder, Werte, Zeilen oder Tabellen), einen anderen Cacheeintrag sowie Dateien und Dateiattribute.

Eine Abhängigkeitsänderung ist eine Änderung des Zustands einer Abhängigkeit. In einer typischen Cacheimplementierung führt der Cache nach einer ChangeMonitor Instanz benachrichtigt, dass eine Abhängigkeit geändert wurde, die erforderliche Aktion aus, z. B. das Ungültigwerden des eingefügten Cacheeintrags.

Abgeleitete ChangeMonitor Klassen können angepasst werden, um Abhängigkeitsänderungen für bestimmte unterschiedliche Datenspeicher zu überwachen. Es gibt z. B. Cacheimplementierungen für ein Dateisystem, einen physischen Speicher oder eine Datenbank. Die ChangeMonitor Klasse untersucht Änderungen, die außerhalb des Caches auftreten, und benachrichtigt dann den Cache, dass Änderungen aufgetreten sind.

Das .NET Framework enthält die folgenden Klassen, die von ChangeMonitor Klasse abgeleitet sind:

Jede dieser Klassen funktioniert mit unterschiedlichen Abhängigkeitstypen. Die abgeleitete FileChangeMonitor Klasse überwacht beispielsweise Änderungen an einem Cache für Dateisystemdaten (Dateien und Ordner), von denen das Cacheelement abhängt.

Hinweise für Ausführende

Wenn Sie eine benutzerdefinierte Cacheimplementierung oder einen abgeleiteten Änderungsmonitortyp erstellen, müssen Sie bestimmte Richtlinien befolgen. Die folgende Liste fasst diese Richtlinien zusammen. Weitere Informationen finden Sie in der Dokumentation zu einzelnen Methoden oder Eigenschaften.

  • Der Konstruktor einer abgeleiteten Klasse muss die Eigenschaft festlegen, mit der UniqueId Überwachung beginnen und die Methode aufrufen InitializationComplete() , bevor die Methode zurückgegeben wird. Wenn ein Konstruktor während der Konstruktionen auf einen Fehler stößt und Ressourcen löschen müssen, kann der Konstruktor die Dispose Überladung nur aufrufen, nachdem die InitializationComplete() Methode aufgerufen wurde, da die Überladung eine InvalidOperationException Ausnahme auslöst, wenn die Dispose Initialisierung nicht abgeschlossen ist.

  • Wenn Änderungen in den Daten auftreten, die vor Abschluss der Initialisierung überwacht werden, muss der Konstruktor die OnChanged(Object) Methode aufrufen, bevor die InitializationComplete() Methode aufgerufen wird.

  • Nachdem ein abgeleiteter ChangeMonitor Typ instanziiert wurde, müssen Sie den Monitor in eine benutzerdefinierte ObjectCache Implementierung einfügen. Oder wenn Sie mit der Verwendung des Änderungsmonitors fertig sind, rufen Sie die Dispose Methode auf.

  • Nachdem eine ChangeMonitor Instanz in eine ObjectCache Implementierung eingefügt wurde, muss die ObjectCache Instanz den Änderungsmonitor verworfen haben. Auch wenn die Einfügung ungültig ist und eine Ausnahme verursacht, muss die ObjectCache Implementierung die Dispose Überladung aufrufen.

  • Nachdem ein abgeleiteter Änderungsmonitor in einen Cache eingefügt wurde, muss die ObjectCache Implementierung aufgerufen NotifyOnChanged(OnChangedCallback)werden, indem ein OnChangedCallback Objekt übergeben wird. Die NotifyOnChanged(OnChangedCallback) Methode kann nur einmal aufgerufen werden. Wenn bereits eine Abhängigkeitsänderung erfolgt ist, wird die OnChangedCallback Instanz sofort aufgerufen, wenn NotifyOnChanged(OnChangedCallback) sie aufgerufen wird. Andernfalls wird die OnChangedCallback Instanz nur einmal aufgerufen. Dieser einmalige Aufruf tritt entweder auf, wenn die OnChanged(Object) Methode aufgerufen wird, weil die ChangeMonitor Instanz eine Änderung erkannt hat oder wenn die Dispose() Methode für den ChangeMonitor, je nachdem, was zuerst auftritt, aufgerufen wird.

  • Die OnChangedCallback Instanz, die von einer ObjectCache Implementierung bereitgestellt wird, sollte den zugehörigen Cacheeintrag entfernen und einen Grund mithilfe der DependencyChanged Enumeration angeben.

  • Eine ChangeMonitor Instanz kann die OnChanged(Object) Methode entweder aufrufen, bevor eine Cacheimplementierung die Methode oder danach aufgerufen NotifyOnChanged(OnChangedCallback) hat. Wenn die OnChanged(Object) Methode aufgerufen wird, bevor NotifyOnChanged(OnChangedCallback) sie aufgerufen wird, benachrichtigt die Basisimplementierung ChangeMonitor den Cache, dass dieser aufgetreten ist, und löst den Rückruf aus, der NotifyOnChanged(OnChangedCallback) beim Aufrufen sofort NotifyOnChanged(OnChangedCallback) übergeben wird. Alle Zustandsdaten, die an die OnChanged(Object) Methode übergeben werden, werden vom Änderungsmonitor gespeichert und anschließend an die NotifyOnChanged(OnChangedCallback) Methode übergeben, wenn die NotifyOnChanged(OnChangedCallback) Methode aufgerufen wird.

  • Ein Änderungsmonitor muss die Dispose(Boolean) Methode implementieren. Weitere Informationen finden Sie in der Dispose(Boolean) Methodendokumentation.

  • Die Dispose() Methodenüberladung muss aufgerufen werden, um die ChangeMonitor Instanz zu löschen. Die Regeln zum Aufrufen von Dispose sind wie folgt:

    • Bevor ein Element in den Cache eingefügt wird, liegt es in der Verantwortung des Aufrufers, eine ChangeMonitor Instanz zu löschen.

    • Sobald das Cacheelement und die Instanzen, die ChangeMonitor ihr zugeordnet sind, an einen Cache übergeben werden, muss der Cacheimplementierer sicherstellen, dass die Dispose Methode aufgerufen wird, auch wenn das Einfügen fehlschlägt.

    • Nachdem ein Element und die zugehörigen ChangeMonitor Instanzen an einen Cache übergeben wurden, darf der Aufrufer die Abhängigkeit nicht löschen, da der Aufruf der Methode beim Aufrufen der Dispose Methode so behandelt wird, als ob sich die Abhängigkeit geändert hat. Daher wird die OnChanged(Object) Methode automatisch aufgerufen.

  • Unter Berücksichtigung dieser Regeln muss die Dispose Methode auf eine der folgenden Arten aufgerufen werden:

    • Benutzer müssen die Dispose() Methodenüberladung aufrufen, wenn sie beschließen, die abgeleitete Änderungsüberwachungsinstanz nicht in einen Cache einzufügen.

    • Wenn die Implementierung versucht, die Änderungsüberwachungsinstanz in einen Objektcache einzufügen, aber die Einfügung fehlschlägt, ist die Cacheimplementierung für den Aufruf der Dispose() Überladung verantwortlich. Wenn der Einfügeversuch eine Ausnahme verursacht, muss die Cacheimplementierung alle zugehörigen Abhängigkeiten löschen.

    • Wenn der Cacheeintrag entfernt wird, muss die Cacheimplementierung auch die Abhängigkeit löschen.

    • Die interne Implementierung der OnChanged(Object) Methode ruft die Dispose Methode automatisch auf, nachdem sie einen Rückruf aufgerufen hat, der über NotifyOnChanged(OnChangedCallback)registriert wird.

Hinweis: Dieser automatische Aufruf der Dispose-Methode während des Auslösens des Ereignisses tritt nur auf, wenn die Initialisierung der ChangeMonitor Instanz zuvor abgeschlossen wurde.

Wenn der Konstruktor eines abgeleiteten Änderungsmonitors die InitializationComplete() Methode aufruft, wenn sich der Status des Änderungsmonitors bereits geändert hat (d. h. der Zustand, der bereits geändert wurde, als der Konstruktor noch aktiv war), wird die InitializationComplete() Methode automatisch den Änderungsmonitor verwerfen.

Konstruktoren

Name Beschreibung
ChangeMonitor()

Initialisiert eine neue Instanz der ChangeMonitor-Klasse. Dieser Konstruktor wird von Konstruktoren in abgeleiteten Klassen aufgerufen, um die Basisklasse zu initialisieren.

Eigenschaften

Name Beschreibung
HasChanged

Ruft einen Wert ab, der angibt, dass sich der Zustand geändert hat, der von der ChangeMonitor Klasse überwacht wird.

IsDisposed

Ruft einen Wert ab, der angibt, dass die abgeleitete Instanz einer ChangeMonitor Klasse verworfen wird.

UniqueId

Ruft einen Wert ab, der die ChangeMonitor Klasseninstanz darstellt.

Methoden

Name Beschreibung
Dispose()

Gibt alle Ressourcen frei, die von der aktuellen Instanz der ChangeMonitor Klasse verwendet werden.

Dispose(Boolean)

Veröffentlicht alle verwalteten und nicht verwalteten Ressourcen und alle Verweise auf die ChangeMonitor Instanz. Diese Überladung muss durch abgeleitete Änderungsüberwachungsklassen implementiert werden.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Dient als die Standard-Hashfunktion

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializationComplete()

Vom Konstruktor abgeleiteter Klassen aufgerufen, um anzugeben, dass die Initialisierung abgeschlossen ist.

MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
NotifyOnChanged(OnChangedCallback)

Wird von Cacheimplementierern aufgerufen, um einen Rückruf zu registrieren und eine ObjectCache Instanz über die OnChangedCallback Stellvertretung zu benachrichtigen, wenn sich eine Abhängigkeit geändert hat.

OnChanged(Object)

Wird von abgeleiteten Klassen aufgerufen, um das Ereignis auszuheben, wenn sich eine Abhängigkeit ändert.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Threadsicherheit

Dieser Typ ist threadsicher.

Weitere Informationen