static private void SearchListAndRemoveEventHandlers(object pObjectToUnhook) { if (_UserPreferenceChangedList == null) { return; //Do not run if we somehow haven't found the list. } //unfortunately, SystemEventInvokeInfo is a private class so we can't declare a reference of that type. //we will use object and then use reflection to get what we need... List <UserPreferenceChangedEventHandler> listDelegatesToRemove = new List <UserPreferenceChangedEventHandler>(); //this is NOT threadsafe. Unfortunately, if the collection is modified an exception will be thrown during iteration. // This will happen any time another thread hooks or unhooks the UserPreferenceChanged event while we iterate. // Modify this to be threadsafe somehow if that is required. foreach (object oSystemEventInvokeInfo in _UserPreferenceChangedList) { UserPreferenceChangedEventHandler oDelegate = GetDelegateFromSystemEventInvokeInfo(oSystemEventInvokeInfo) as UserPreferenceChangedEventHandler; if (oDelegate != null && oDelegate.Target == pObjectToUnhook) { //at this point we have found an event handler that must be unhooked. listDelegatesToRemove.Add(oDelegate); } } //We should unhook using the public method because the internal implementation of this event is unknown. // iterating the private internal list is already shady enough without manipulating it directly... foreach (UserPreferenceChangedEventHandler itemToRemove in listDelegatesToRemove) { SystemEvents.UserPreferenceChanged -= itemToRemove; } }
/// <summary> /// Constructs a new Aero styled form. /// </summary> public AeroForm() { Font = SystemFonts.MessageBoxFont; _preferencesHandler = new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); SystemEvents.UserPreferenceChanged += _preferencesHandler; }
/// <summary> /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed. /// <example> /// userpreferencechangedeventhandler.BeginInvoke(sender, e, callback); /// </example> /// </summary> public static IAsyncResult BeginInvoke(this UserPreferenceChangedEventHandler userpreferencechangedeventhandler, Object sender, UserPreferenceChangedEventArgs e, AsyncCallback callback) { if (userpreferencechangedeventhandler == null) { throw new ArgumentNullException("userpreferencechangedeventhandler"); } return(userpreferencechangedeventhandler.BeginInvoke(sender, e, callback, null)); }
public void SignalsUserPreferenceEventsAsynchronouslyOnThemeChanged() { var changing = new AutoResetEvent(false); var changed = new AutoResetEvent(false); UserPreferenceChangingEventArgs changingArgs = null; UserPreferenceChangingEventHandler changingHandler = (o, e) => { changingArgs = e; changing.Set(); }; List <UserPreferenceChangedEventArgs> changedArgs = new List <UserPreferenceChangedEventArgs>(); UserPreferenceChangingEventArgs changingDuringChanged = null; UserPreferenceChangedEventHandler changedHandler = (o, e) => { changedArgs.Add(e); changingDuringChanged = changingArgs; // signal test to continue after two events were recieved if (changedArgs.Count > 1) { changed.Set(); } }; SystemEvents.UserPreferenceChanging += changingHandler; SystemEvents.UserPreferenceChanged += changedHandler; try { SendMessage(User32.WM_THEMECHANGED, 0, null); Assert.True(changing.WaitOne(PostMessageWait)); Assert.NotNull(changingArgs); Assert.Equal(UserPreferenceCategory.VisualStyle, changingArgs.Category); Assert.True(changed.WaitOne(PostMessageWait)); Assert.Equal(2, changedArgs.Count); Assert.NotNull(changedArgs[0]); Assert.Equal(UserPreferenceCategory.Window, changedArgs[0].Category); Assert.NotNull(changedArgs[1]); Assert.Equal(UserPreferenceCategory.VisualStyle, changedArgs[1].Category); // changed must follow changing for VisualStyle Assert.NotNull(changingDuringChanged); Assert.Equal(UserPreferenceCategory.VisualStyle, changingDuringChanged.Category); } finally { SystemEvents.UserPreferenceChanging -= changingHandler; SystemEvents.UserPreferenceChanged -= changedHandler; changing.Dispose(); changed.Dispose(); } }
public void SignalsUserPreferenceEventsSynchronouslyOnReflectedThemeChanged() { bool changing = false, changed = false; UserPreferenceChangingEventArgs changingArgs = null; UserPreferenceChangingEventHandler changingHandler = (o, e) => { changingArgs = e; changing = true; }; List <UserPreferenceChangedEventArgs> changedArgs = new List <UserPreferenceChangedEventArgs>(); UserPreferenceChangingEventArgs changingDuringChanged = null; UserPreferenceChangedEventHandler changedHandler = (o, e) => { changedArgs.Add(e); changingDuringChanged = changingArgs; changed = true; }; SystemEvents.UserPreferenceChanging += changingHandler; SystemEvents.UserPreferenceChanged += changedHandler; try { SendReflectedMessage(User32.WM_THEMECHANGED, 0, null); Assert.True(changing); Assert.NotNull(changingArgs); Assert.Equal(UserPreferenceCategory.VisualStyle, changingArgs.Category); Assert.True(changed); Assert.Equal(2, changedArgs.Count); Assert.NotNull(changedArgs[0]); Assert.Equal(UserPreferenceCategory.Window, changedArgs[0].Category); Assert.NotNull(changedArgs[1]); Assert.Equal(UserPreferenceCategory.VisualStyle, changedArgs[1].Category); // changed must follow changing for VisualStyle Assert.NotNull(changingDuringChanged); Assert.Equal(UserPreferenceCategory.VisualStyle, changingDuringChanged.Category); } finally { SystemEvents.UserPreferenceChanging -= changingHandler; SystemEvents.UserPreferenceChanged -= changedHandler; } }
public void SignalsUserPreferenceEventsAsynchronously(int message, int uiAction, string area, UserPreferenceCategory expectedCategory) { var changing = new AutoResetEvent(false); var changed = new AutoResetEvent(false); UserPreferenceChangingEventArgs changingArgs = null; UserPreferenceChangingEventHandler changingHandler = (o, e) => { changingArgs = e; changing.Set(); }; UserPreferenceChangedEventArgs changedArgs = null; UserPreferenceChangingEventArgs changingDuringChanged = null; UserPreferenceChangedEventHandler changedHandler = (o, e) => { changedArgs = e; changingDuringChanged = changingArgs; changed.Set(); }; SystemEvents.UserPreferenceChanging += changingHandler; SystemEvents.UserPreferenceChanged += changedHandler; try { SendMessage(message, uiAction, area); Assert.True(changing.WaitOne(PostMessageWait)); Assert.NotNull(changingArgs); Assert.Equal(expectedCategory, changingArgs.Category); Assert.True(changed.WaitOne(PostMessageWait)); Assert.NotNull(changedArgs); Assert.Equal(expectedCategory, changedArgs.Category); // changed must follow changing for the same category Assert.NotNull(changingDuringChanged); Assert.Equal(expectedCategory, changingDuringChanged.Category); } finally { SystemEvents.UserPreferenceChanging -= changingHandler; SystemEvents.UserPreferenceChanged -= changedHandler; changing.Dispose(); changed.Dispose(); } }
public void SignalsUserPreferenceEventsSynchronously(int message, int uiAction, string area, UserPreferenceCategory expectedCategory) { bool changing = false, changed = false; UserPreferenceChangingEventArgs changingArgs = null; UserPreferenceChangingEventHandler changingHandler = (o, e) => { changingArgs = e; changing = true; }; UserPreferenceChangedEventArgs changedArgs = null; UserPreferenceChangingEventArgs changingDuringChanged = null; UserPreferenceChangedEventHandler changedHandler = (o, e) => { changedArgs = e; changingDuringChanged = changingArgs; changed = true; }; SystemEvents.UserPreferenceChanging += changingHandler; SystemEvents.UserPreferenceChanged += changedHandler; try { SendReflectedMessage(message, uiAction, area); Assert.True(changing); Assert.NotNull(changingArgs); Assert.Equal(expectedCategory, changingArgs.Category); Assert.True(changed); Assert.NotNull(changedArgs); Assert.Equal(expectedCategory, changedArgs.Category); // changed must follow changing for the same category Assert.NotNull(changingDuringChanged); Assert.Equal(expectedCategory, changingDuringChanged.Category); } finally { SystemEvents.UserPreferenceChanging -= changingHandler; SystemEvents.UserPreferenceChanged -= changedHandler; } }
/// <summary> /// Sets handlers for notifying the application of desktop preference changes (taskbar movements, etc.). /// </summary> private void SetHandlers() { if (this.PreferenceEvent == null && this.PreferenceEventHandler == null) { this.PreferenceEvent = new UserPreferenceChanged(this.DesktopPreferenceChangedHandler); this.PreferenceEventHandler = new UserPreferenceChangedEventHandler(this.PreferenceEvent); SystemEvents.UserPreferenceChanged += this.PreferenceEventHandler; } }
/// <summary> /// Releases handlers set by SetHandlers(). /// </summary> private void ReleaseHandlers() { if (this.PreferenceEvent != null || this.PreferenceEventHandler != null) { SystemEvents.UserPreferenceChanged -= this.PreferenceEventHandler; this.PreferenceEvent = null; this.PreferenceEventHandler = null; } }
public static void add_UserPreferenceChanged(UserPreferenceChangedEventHandler value) { }
public static void add_UserPreferenceChanged (UserPreferenceChangedEventHandler value) { }