C# AutomationElement还活着吗?

C# AutomationElement还活着吗?,c#,.net,ui-automation,microsoft-ui-automation,automationelement,C#,.net,Ui Automation,Microsoft Ui Automation,Automationelement,我正在使用MicrosoftUI自动化,但遇到了一些问题,其中一个问题是我想知道AutomationElement是否仍然存在。更确切地说,我想检查一个窗口是否已关闭。我认为这是这类问题最常见的情况,我尝试了不同的场景,最终得到了一个解决方案,我尝试访问元素的不同属性,看看它是否抛出ElementNotAvailableException。我还偶然发现了一个名为IsofScreen的属性,它在本例中似乎非常有用。但是,由于我在网上找不到太多关于这方面的信息,我想知道是否有更好的解决方案。最近几天

我正在使用MicrosoftUI自动化,但遇到了一些问题,其中一个问题是我想知道AutomationElement是否仍然存在。更确切地说,我想检查一个窗口是否已关闭。我认为这是这类问题最常见的情况,我尝试了不同的场景,最终得到了一个解决方案,我尝试访问元素的不同属性,看看它是否抛出ElementNotAvailableException。我还偶然发现了一个名为IsofScreen的属性,它在本例中似乎非常有用。但是,由于我在网上找不到太多关于这方面的信息,我想知道是否有更好的解决方案。最近几天我对这个框架不太满意,因为它对我来说非常不稳定(尤其是在寻找AutomationElement时)。也许你可以帮我在我的实现中获得更多的专业知识

多谢各位


Marcel

在获取AutomationElement之前,您可能会捕获ElementNotAvailableException

try 
{
  var info = automationElement.Current;
  var name = info.Name;
}
catch (ElementNotAvailableException) {}

我会把它包装成一个扩展:

public static bool Alive(this AutomationElement ae)
{
    try
    {
        var t = ae.Current.Name;
        return true;
    }
    catch(ElementNotAvailableException)
    {
        return false;
    }
}

让它告诉你,用我在事件中做了一些糟糕的经历,这就是为什么我还没有尝试过这个。我会再给它一次机会