Problema di automazione dell’interfaccia utente WPF

Questo thread appartiene a questo

Sto chiedendo dove ho bisogno di inserire la soluzione da questo

Ho un’applicazione WPF che ha problemi di prestazioni su alcuni client con Windows 7. Su Windows XP tutto funziona velocemente. L’applicazione ha un MainShell e alcuni Child-Windows. Il MainShell si blocca a volte su alcune macchine, così come le windows secondarie. Ora, devo inserire la soluzione alternativa dal thread dal link sopra in tutte le windows? Ci sono ancora altre soluzioni a riguardo?

Ho lavorato su un’applicazione che è andata bene praticamente su tutto, ma i controlli WPF erano lenti su alcuni laptop (Lenovo). Stava rallentando e congelando e generalmente inibendo l’uso.

Ho fatto quanto segue:

  1. Implementato il codice sopra: Migliorato, ma non risolto.
  2. Hotfix scaricato – – http://archive.msdn.microsoft.com/KB978520 (potrebbe non essere richiesto)
  3. Hotfix scaricato – – http://archive.msdn.microsoft.com/KB2484841 (sicuramente richiesto anche se si dispone di Windows 7 / .NET 4)
  4. Migliorato ulteriormente il codice (la validazione stava causando un eccesso di oggetti) – Perché WPF Style mostra errori di validazione in ToolTip per un TextBox ma fallisce per un ComboBox?

Potrebbe essere che solo il numero 3 fosse richiesto, ma ha funzionato. Pubblicare solo qui in modo che le persone non perdano i giorni in cui ho perso in profiler di memoria, ecc.

Nel mio caso ha funzionato aggiungendo quel codice alla finestra principale. Tuttavia, l’ho semplificato un po ‘:

public partial class MyMainWindow : Window { public MyMainWindow() { GotFocus += WindowGotFocus; } private void WindowGotFocus(object sender, RoutedEventArgs e) { WindowInteropHelper helper = new WindowInteropHelper(this); var mainWindowAutomationElement = AutomationElement.FromHandle(helper.Handle); Automation.AddStructureChangedEventHandler(mainWindowAutomationElement, TreeScope.Element, delegate {}); GotFocus -= WindowGotFocus; } } 

L’unico problema con questo approccio, nella mia macchina, è che la finestra del debugger si riempie di messaggi come:

  • Si è verificata una prima eccezione di tipo System.Windows.Automation.ElementNotAvailableException “in PresentationCore.dll
  • Una prima eccezione di tipo “System.ArgumentException” si è verificata in UIAutomationClientsideProviders.dll
  • Si è verificata una prima eccezione di tipo “System.NotSupportedException” in mscorlib.dll
  • Si è verificata una prima eccezione di tipo “System.ComponentModel.Win32Exception” in UIAutomationClient.dll

Tutto accade molte volte. Non ho potuto correggere questi messaggi, ma ora la mia applicazione è più veloce.