Sottoscrizione agli eventi di automazione interfaccia utente
L'Automazione dell'interfaccia utente di Microsoft consente ai client di iscriversi agli eventi di interesse. Questa funzionalità migliora le prestazioni eliminando la necessità di eseguire continuamente il polling degli elementi dell'interfaccia utente nel sistema per verificare se sono state modificate informazioni, struttura o stato.
L'efficienza è migliorata anche dalla capacità di ascoltare gli eventi solo all'interno di un ambito definito. Ad esempio, un client può restare in ascolto delle modifiche di selezione di un elemento in un elenco, nell'elenco stesso o in un'intera finestra di dialogo.
Nota
Non presupporre che tutti gli eventi possibili vengano generati da un provider di automazione interfaccia utente. Ad esempio, non tutte le modifiche alle proprietà causano la generazione di eventi dai provider proxy standard per i controlli Windows Form e Microsoft Win32.
Per una visualizzazione più ampia degli eventi di automazione interfaccia utente, vedere Panoramica degli eventi di automazione interfaccia utente.
Nota
Prima di implementare un gestore eventi, è necessario avere familiarità con i problemi di threading descritti in Informazioni sui problemi di threading.
Questo argomento contiene le sezioni seguenti.
Registrazione dei gestori eventi
Le applicazioni client sottoscrivono eventi di un determinato tipo registrando un gestore eventi, usando uno dei metodi seguenti IUIAutomation.
Metodo di sottoscrizione | Tipo di evento | Interfaccia di callback |
---|---|---|
AddFocusChangedEventHandler | Cambio del focus | IUIAutomationFocusChangedEventHandler |
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray | Modifica delle proprietà | IUIAutomationPropertyChangedEventHandler |
AddStructureChangedEventHandler | Modifica della struttura | IUIAutomationStructureChangedEventHandler |
AddNotificationEventHandler | Notifica | IUIAutomationNotificationEventHandler |
AddAutomationEventHandler | Altri eventi | IUIAutomationEventHandler |
Quando un client aggiunge un gestore eventi per tutti i discendenti (TreeScope_Descendants), UI Automation aggiunge un solo gestore per la radice del sottoalbero, e il gestore rimane in ascolto di tutti i discendenti. Automazione interfaccia utente non aggiunge gestori eventi in modo ricorsivo.
Quando un client chiama il metodo IUIAutomation::RemoveAllEventHandlers, Automazione Interfaccia Utente rimuove tutti i gestori eventi dal processo client.
Per ricevere e gestire gli eventi, implementare un oggetto di gestione degli eventi che espone un'interfaccia di callback ed è necessario registrare l'oggetto chiamando un metodo di registrazione eventi, ad esempio IUIAutomation::AddPropertyChangedEventHandler. L'interfaccia di callback ha un singolo metodo; Automazione interfaccia utente chiama questo metodo quando viene elaborato l'evento.
Allo spegnimento, o quando gli eventi dell'automazione dell'interfaccia utente non sono più di interesse per l'applicazione, i client dell'automazione dell'interfaccia utente dovrebbero chiamare uno o più dei seguenti metodi IUIAutomation.
Nota
Un client di automazione interfaccia utente non deve usare più thread per aggiungere o rimuovere gestori eventi. Un comportamento imprevisto può verificarsi se un gestore eventi viene aggiunto o rimosso mentre un altro subisce la stessa sorte nello stesso processo client.
Metodo | Descrizione |
---|---|
RemoveAutomationEventHandler | Annulla la registrazione di un gestore eventi registrato tramite AddAutomationEventHandler. |
RemoveFocusChangedEventHandler | Annulla la registrazione di un gestore eventi che era stato registrato tramite AddFocusChangedEventHandler. |
RemovePropertyChangedEventHandler | Annulla la registrazione di un gestore eventi registrato tramite AddPropertyChangedEventHandler o AddPropertyChangedEventHandlerNativeArray. |
RemoveStructureChangedEventHandler | Annulla la registrazione di un gestore di eventi che è stato registrato usando AddStructureChangedEventHandler. |
RemoveNotificationEventHandler | Annulla la registrazione di un gestore di eventi che era stato registrato tramite AddNotificationEventHandler. |
RemoveAllEventHandlers | Annulla la registrazione di tutti i gestori eventi registrati. |
È possibile che un evento venga recapitato a un gestore eventi dopo che il gestore è stato annullato, se l'evento viene ricevuto contemporaneamente con la richiesta di annullare la sottoscrizione dell'evento. La procedura consigliata consiste nel seguire lo standard COM (Component Object Model) ed evitare di eliminare definitivamente l'oggetto gestore eventi fino al raggiungimento del numero di riferimenti pari a zero. L'eliminazione di un gestore eventi immediatamente dopo l'annullamento della sottoscrizione per gli eventi può comportare una violazione di accesso se un evento viene recapitato in ritardo.
Esempi
Per esempi di codice che illustrano come gestire gli eventi di automazione interfaccia utente, vedere Come implementare gestori eventi.
Argomenti correlati