【问题标题】: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)
FindAll 和 FindFirst 都容易出现这种异常,即
尝试在 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);
}
}
解决问题。需要进一步调查。我们很可能会
必须用自定义替换 FindFirst 和 FindAll 调用
TreeWalker迭代方法。
这将解决无法获取页面源的问题
带有WebViews 的视图并且无法在WebView 中找到元素
由于同样的错误。