WPF UI自动化问题

时间:2011-06-15 18:16:28

标签: c# wpf performance ui-automation

此主题属于this

我在问我在哪里需要从this

插入变通方法

我有一个WPF应用程序,在Windows 7的某些客户端上存在性能问题。在Windows XP上,所有工作都很快。该应用程序有一个MainShell和一些Child-Windows。 MainShell有时在某些机器上挂起,子窗口也是如此。现在,我是否必须从所有窗口中的上述链接的线程中插入变通方法? 还有其他解决方法吗?

2 个答案:

答案 0 :(得分:2)

我一直致力于一个几乎所有东西都很好的应用程序,但WPF控件在某些笔记本电脑上很慢(联想)。它是滞后和冻结的,通常会抑制使用。

我做了以下事情:

  1. 实现了上面的代码:改进了它,但没有修复。
  2. 已下载的修补程序 - http://archive.msdn.microsoft.com/KB978520(可能不是必需的)
  3. 已下载的修补程序 - - http://archive.msdn.microsoft.com/KB2484841(即使您拥有Windows 7 / .NET 4也一​​定要求)
  4. 进一步改进了代码(验证导致了过多的对象) - Why does WPF Style to show validation errors in ToolTip work for a TextBox but fails for a ComboBox?
  5. 可能只需要3号,但它有效。只是发布在这里,所以人们不会失去我在内存分析器等中丢失的日子。

答案 1 :(得分:1)

在我的情况下,它通过将代码添加到主窗口来工作。但是,我简化了一下:

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

在我的机器中,这种方法的唯一问题是调试器窗口混乱了如下消息:

  • PresentationCore.dll中出现System.Windows.Automation.ElementNotAvailableException类型的第一次机会异常
  • UIAutomationClientsideProviders.dll中发生'System.ArgumentException'类型的第一次机会异常
  • mscorlib.dll中出现'System.NotSupportedException'类型的第一次机会异常
  • UIAutomationClient.dll中出现'System.ComponentModel.Win32Exception'类型的第一次机会异常

所有事情都发生了很多次。我无法修复这些消息,但我的应用程序现在运行得更快。