private void UnregisterAllEventListener()

in src/Desktop/UIAutomation/EventHandlers/EventListenerFactory.cs [145:218]


        private void UnregisterAllEventListener()
        {
#pragma warning disable CA2000 // Call IDisposeable.Dispose()

            /// Need to find out a way to handle
            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_AutomationFocusChangedEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_StructureChangedEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_AutomationPropertyChangedEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_NotificationEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_TextEdit_TextChangedEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_ActiveTextPositionChangedEventId
            });

            UnregisterEventListener(new EventListenerFactoryMessage
            {
                EventId = EventType.UIA_ChangesEventId
            });
#pragma warning restore CA2000

            HandleUIAutomationEventMessage listener = null;
            try
            {
                foreach (var e in this.EventListeners.Values)
                {
                    listener = e.ListenEventMessage;
                    e.Dispose();
                }
                this.EventListeners.Clear();
                if (listener != null)
                {
#pragma warning disable CA2000 // Call IDisposable.Dispose()
                    var m = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null);
#pragma warning restore CA2000

                    m.Properties = new List<KeyValuePair<string, dynamic>> { new KeyValuePair<string, dynamic>("Message", "Succeeded to unregister all event listeners.") };
                    listener(m);
                }
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception e)
            {
                e.ReportException();

#pragma warning disable CA2000 // Call IDisposable.Dispose()
                var m  = EventMessage.GetInstance(EventType.UIA_EventRecorderNotificationEventId, null);
#pragma warning restore CA2000

                m.Properties = new List<KeyValuePair<string, dynamic>> { new KeyValuePair<string, dynamic>("Message", $"Failed to unregister all listeners: {e.Message}") };
                listener(m);
            }
#pragma warning restore CA1031 // Do not catch general exception types
        }