【问题标题】:Windows UIAutomation sometimes hangs other appsWindows UIAutomation 有时会挂起其他应用程序
【发布时间】:2018-05-28 23:14:24
【问题描述】:

我在我的 WPF 客户端应用程序中通过 COM 接口使用 UIAutomation。一些用户有时会挂起他们的特定应用程序(如 nVidia 控制面板)。我的应用收到该异常:

System.Runtime.InteropServices.COMException (0x80131505):操作 时间到。 (来自 HRESULT 的异常:0x80131505) 在 UIAutomationClient.IUIAutomationElement.FindAll (TreeScope 范围, IUIAutomationCondition 条件)。

我无法在我的电脑上重现此内容。

  • 您是否遇到过此类问题?
  • 对于这种情况,您有任何解决方法吗?
  • 我能以某种方式减少 COM 超时吗?也许这会解决问题

【问题讨论】:

    标签: c# com ui-automation microsoft-ui-automation


    【解决方案1】:

    我找到了一些关于这个问题的信息。

    • UIAutomation 仅在带有 Creator's Update (source) 的 Windows 10 上不稳定
    • 这是错误,已提交here
    • NickAb 找到了解决方案:使用 TreeWalker (source)

    FindAllFindFirst 都容易出现这种异常,即 尝试在 WebView 中查找已加载其的元素时引发 最近的数据,当方法尝试构建缓存时抛出异常,所以 这可能是由于尝试迭代可视化树而导致的 由另一个线程重建。

    FindAll 替换为

    private IEnumerable<WiniumElement> GetChildrens()
    {
        var elementNode = TreeWalker.ControlViewWalker.GetFirstChild(this.AutomationElement);
    
        while (elementNode != null)
        {
            yield return new WiniumElement(elementNode);
            elementNode = TreeWalker.ControlViewWalker.GetNextSibling(elementNode);
        }
    }
    

    解决问题。需要进一步调查。我们很可能会 必须用自定义替换 FindFirstFindAll 调用 TreeWalker迭代方法。

    这将解决无法获取页面源的问题 带有WebViews 的视图并且无法在WebView 中找到元素 由于同样的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多