Sto sviluppando un'applicazione in C++ che utilizza UIAutomation per ricevere notifiche di eventi significativi relativi all'interazione dell'utente. Ho provato il gestore anevent chiamando AddAutomationEventHandler a essere ascoltato per gli eventi di apertura della finestra, ma sto avendo problemi a fermare la notifica e la pulizia prima di uscire. Se l'utente ha avviato determinate applicazioni, come Firefox, la chiamata a RemoveAutomationEventHandlerhangs. (Anche chiamare RemoveAllEventHandlers si blocca in questo caso.) Si noti che tutte le chiamate per aggiungere o rimuovere i gestori di eventi vengono eseguite nel contesto dello stesso thread non dell'interfaccia utente.IUIAutomation :: RemoveAllEventHandlers si blocca
Nota: sto vedendo questo comportamento su Windows 7 e Windows 8.
Delle idee su perché questo sta accadendo o come risolvere il problema? Cosa rende la struttura modificata evento diverso da tutti gli altri?
Puoi chiarire un po 'di più sulla necessità di inviare messaggi? Stai parlando di messaggi di Windows? Come si dovrebbe fare questo e non tutte le chiamate e gli eventi di UiAutomation sono sostanzialmente incrociati? –
@o_weisman In particolare, i thread di apartment a thread singolo (STA) devono pompare i messaggi di Windows per ottenere chiamate COM in entrata inviate nel thread. Se hai inserito il thread nel MTA (o stai utilizzando il codice gestito, che è più o meno la stessa cosa), le chiamate COM in arrivo possono essere inviate a qualsiasi thread in attesa nel MTA. E sì, la maggior parte delle chiamate e degli eventi di UI Automation sono sostanzialmente incrociati. –
Ciao Eric, grazie per la risposta. A differenza dell'OP, sto sviluppando utilizzando le librerie C# gestite di UI Automation e, tuttavia, sto sperimentando blocchi simili in RemoveAllEventHandlers a volte. Ciò che è ancora più peculiare, sto vedendo ritardi molto lunghi (in minuti) tra l'apertura di Windows Winforms nell'applicazione testata e il richiamo del gestore di WindowOpened di UI Automation. Hai mai incontrato simili comportamenti? –