Проблема автоматизации пользовательского интерфейса WPF - PullRequest
2 голосов
/ 15 июня 2011

Эта тема принадлежит этой

Я спрашиваю, куда мне нужно вставить обходной путь от этой

У меня есть приложение WPFкоторый имеет проблемы с производительностью на некоторых клиентах с Windows 7. На Windows XP все работает быстро.В приложении есть MainShell и немного Child-Windows.MainShell зависает иногда на некоторых машинах, как и дочерние окна.Теперь я должен вставить обходной путь из потока по ссылке выше во всех окнах?Есть ли другие способы обойти это?

Ответы [ 2 ]

2 голосов
/ 18 мая 2012

Я работал над приложением, которое работало практически на всех, но элементы управления WPF работали медленно на некоторых ноутбуках (Lenovo).Это было запаздывание и замораживание и вообще запрещало использование.

Я сделал следующее:

  1. Реализовал код выше: улучшил его, но не исправил.Исправление - - http://archive.msdn.microsoft.com/KB978520 (может не потребоваться)
  2. Загруженное исправление - - http://archive.msdn.microsoft.com/KB2484841 (обязательно требуется, даже если у вас Windows 7 / .NET 4)
  3. Дальнейшее улучшение кода (проверка приводила к избытку объектов) - Почему WPF Style отображает ошибки проверки в ToolTip для TextBox, но не работает для ComboBox?

Может быть, требуется только номер 3, но это сработало.Просто публикуйте здесь, чтобы люди не теряли дни, которые я потерял в профилировщиках памяти и т. Д.

1 голос
/ 01 июля 2011

В моем случае это сработало, добавив этот код в главное окно.Однако я немного упростил это:

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;
    }
}

Единственная проблема с этим подходом на моей машине состоит в том, что окно отладчика загромождено сообщениями:

  • Первыйслучайное исключение типа System.Windows.Automation.ElementNotAvailableException 'произошло в PresentationCore.dll
  • Первое случайное исключение типа System.ArgumentException' произошло в UIAutomationClientsideProviders.dll
  • Первое случайное исключениетип 'System.NotSupportedException' произошел в mscorlib.dll
  • Первое случайное исключение типа 'System.ComponentModel.Win32Exception' произошло в UIAutomationClient.dll

Все это происходит много раз.Я не мог исправить эти сообщения, но теперь мое приложение работает быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...