コード例 #1
0
ファイル: LeakHelper.cs プロジェクト: pcdummy/Eto
        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;
            }
        }
コード例 #2
0
        /// <summary>
        /// Constructs a new Aero styled form.
        /// </summary>
        public AeroForm()
        {
            Font = SystemFonts.MessageBoxFont;

            _preferencesHandler = new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
            SystemEvents.UserPreferenceChanged += _preferencesHandler;
        }
コード例 #3
0
ファイル: AeroForm.cs プロジェクト: wsrf2009/KnxUiEditor
        /// <summary>
        /// Constructs a new Aero styled form.
        /// </summary>
        public AeroForm()
        {
            Font = SystemFonts.MessageBoxFont;

            _preferencesHandler = new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
            SystemEvents.UserPreferenceChanged += _preferencesHandler;
        }
コード例 #4
0
        /// <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));
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
        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();
            }
        }
コード例 #8
0
        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;
            }
        }
コード例 #9
0
ファイル: SmallWindow.xaml.cs プロジェクト: poros/whereless
 /// <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;
     }
 }
コード例 #10
0
ファイル: SmallWindow.xaml.cs プロジェクト: poros/whereless
 /// <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;
     }
 }
コード例 #11
0
 public static void add_UserPreferenceChanged(UserPreferenceChangedEventHandler value)
 {
 }
コード例 #12
0
        public static void add_UserPreferenceChanged (UserPreferenceChangedEventHandler value) {

        }