コード例 #1
0
        /// <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.
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <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();
                }
            }
        }
コード例 #3
0
 /// <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);
 }
コード例 #4
0
 /// <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);
 }
コード例 #5
0
        /// <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.
                        }
                    }
                }
            }
        }
コード例 #6
0
        /// <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();
                }
            }
        }
コード例 #7
0
 public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback)
 {
     AddRegistryChangeListener(hkey, key, callback, false);
 }
コード例 #8
0
 /// <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);
 }
コード例 #9
0
 /// <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);
 }
コード例 #10
0
 public void AddRegistryChangeListener(UIntPtr hkey, string key, RegistryKeyEventHandler callback)
 {
     AddRegistryChangeListener(hkey, key, callback, false);
 }