/// <summary> /// Deregister for registry change events. /// </summary> /// <param name="hkey"></param> /// <param name="key"></param> /// <param name="callback"></param> public void RemoveRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback) { lock (this) { RegistryKeyMonitor keyMonitor = GetRegistryKeyMonitor(hkey, key); keyMonitor.RemoveChangeListener(callback); if (!keyMonitor.HasListeners()) { //TODO: deregister for change key events //Debug.WriteLine("stop listening for changes to registry key: " + keyMonitor.FullKey, "RegistryMonitor"); keyMonitors.Remove(keyMonitor.FullKey); keyMonitor.settingsChangedEvent.Close(); //Reset the list of monitor handles. ResetMonitorHandles(); //if there are no more listeners, abort the monitor thread. if (keyMonitors.Count == 0) { try { monitorAbortEvent.Set(); } catch (ObjectDisposedException) { //occurs when removing change listeners while shutting down. } } } } }
/// <summary> /// Register a method for callbacks when the specified registry key is changed. /// Note: this operation does not recursively register for notifcations from subkeys! /// </summary> /// <param name="hkey">the HKEY constant (HKEY.CURRENT_USER or HKEY.CLASSES_ROOT)</param> /// <param name="key">the registry key path (example: @"Software\AppDataLow\Software\Onfolio\Preferences\Appearance"</param> /// <param name="callback">the callback delegate that is invoked when the registry key changes</param> public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback, bool autoCreateKey) { if (!autoCreateKey && !RegistryHelper.KeyExists(hkey, key)) { return; } lock (this) { RegistryKeyMonitor keyMonitor = GetRegistryKeyMonitor(hkey, key, autoCreateKey); keyMonitor.AddChangeListener(callback); //launch the monitor thread if it hasn't been started. if (monitorThread == null) { monitorThread = new Thread(new ThreadStart(this.MonitorChanges)); monitorThread.IsBackground = true; monitorThread.Name = "Registry Monitor"; monitorThread.Start(); } } }
/// <summary> /// Remove a listener for changes to this object's registry key. /// </summary> /// <param name="handler"></param> internal void RemoveChangeListener(RegistryKeyEventHandler handler) { keyHandlers = (RegistryKeyEventHandler)Delegate.Remove(keyHandlers, handler); }
/// <summary> /// Add a listener for changes to this object's registry key. /// </summary> /// <param name="handler"></param> internal void AddChangeListener(RegistryKeyEventHandler handler) { keyHandlers = (RegistryKeyEventHandler)Delegate.Combine(keyHandlers, handler); }
/// <summary> /// Deregister for registry change events. /// </summary> /// <param name="hkey"></param> /// <param name="key"></param> /// <param name="callback"></param> public void RemoveRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback) { lock (this) { RegistryKeyMonitor keyMonitor = GetRegistryKeyMonitor(hkey, key); keyMonitor.RemoveChangeListener(callback); if (!keyMonitor.HasListeners()) { //TODO: deregister for change key events //Debug.WriteLine("stop listening for changes to registry key: " + keyMonitor.FullKey, "RegistryMonitor"); keyMonitors.Remove(keyMonitor.FullKey); keyMonitor.settingsChangedEvent.Close(); //Reset the list of monitor handles. ResetMonitorHandles(); //if there are no more listeners, abort the monitor thread. if (keyMonitors.Count == 0) { try { monitorAbortEvent.Set(); } catch (ObjectDisposedException) { //occurs when removing change listeners while shutting down. } } } } }
/// <summary> /// Register a method for callbacks when the specified registry key is changed. /// Note: this operation does not recursively register for notifcations from subkeys! /// </summary> /// <param name="hkey">the HKEY constant (HKEY.CURRENT_USER or HKEY.CLASSES_ROOT)</param> /// <param name="key">the registry key path (example: @"Software\AppDataLow\Software\Onfolio\Preferences\Appearance"</param> /// <param name="callback">the callback delegate that is invoked when the registry key changes</param> public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback, bool autoCreateKey) { if (!autoCreateKey && !RegistryHelper.KeyExists(hkey, key)) return; lock (this) { RegistryKeyMonitor keyMonitor = GetRegistryKeyMonitor(hkey, key, autoCreateKey); keyMonitor.AddChangeListener(callback); //launch the monitor thread if it hasn't been started. if (monitorThread == null) { monitorThread = new Thread(new ThreadStart(this.MonitorChanges)); monitorThread.IsBackground = true; monitorThread.Name = "Registry Monitor"; monitorThread.Start(); } } }
public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback) { AddRegistryChangeListener(hkey, key, callback, false); }
/// <summary> /// Remove a listener for changes to this object's registry key. /// </summary> /// <param name="handler"></param> internal void RemoveChangeListener(RegistryKeyEventHandler handler) { keyHandlers = (RegistryKeyEventHandler)Delegate.Remove(keyHandlers, handler); }
/// <summary> /// Add a listener for changes to this object's registry key. /// </summary> /// <param name="handler"></param> internal void AddChangeListener(RegistryKeyEventHandler handler) { keyHandlers = (RegistryKeyEventHandler)Delegate.Combine(keyHandlers, handler); }
public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback) { AddRegistryChangeListener(hkey, key, callback, false); }