gpt4 book ai didi

c# - Application.GetWindow() *非常*慢

转载 作者:IT王子 更新时间:2023-10-29 04:51:13 27 4
gpt4 key购买 nike

我按顺序调用了以下两个方法(按顺序使用适当的类级别字段)

public const string ProcessName = "This is"
public const string WindowTitle = "somewhat proprietary."

public Application App { get; set; }

public void Launch()
{
var theProcess = Process.GetProcesses().First(p => p.ProcessName.Contains(ProcessName))
App = Application.Attach(theProcess);
}

public void Select()
{
var window = App.GetWindow(WindowTitle);

var textBox = window.Get<TextBox>();
//etc, do more stuff in the window
}

当我运行它时,对 App.GetWindow() 的调用需要很长时间。好像超过一分钟。应用程序和窗口都已打开并正在运行。

我尝试过重载 GetWindow() 并尝试调用 Application.GetWindows()Application.Find(),但结果相同。

有没有人对我如何减少这段时间有任何想法,或者至少指出是什么花了这么长时间?无论如何,我都没有与我拥有的实现结婚 - 无论让我得到那个窗口对象对我来说都很好。

更新:

为了解决目前的评论,我修改了代码以尝试消除尽可能多的其他问题。

public void Select()
{
var processes = Process.GetProcesses().ToList();
var process = processes.First(p => p.ProcessName.ToLower().Contains("notepad"));
App = Application.Attach(process);
var window = App.GetWindow("Untitled - Notepad");
}

我加入了可枚举评估以消除任何延迟执行。而且,我用我的应用程序和记事本都试过了。上面的代码,对于我的应用程序和记事本,在调试器中立即执行前 3 行,然后在这两种情况下在最后一行上花费过多的时间。

(White 似乎有可能在内部推迟执行 Application.Attach,但我对这个工具了解不多,所以这对我来说非常不透明。)

第二次更新:

下面是 GetWindow() 方法所用时间的明细。该应用程序在 GetWindow() 中花费了大约 10% 的时间,因此超过一半的时间花在了 WaitTillFound() 中,几乎所有时间都花在了 Retry() 方法中。关于如何减少该时间(或减少找到后在 Window 构造函数中花费的时间)的任何想法? Diagnostics

最佳答案

不清楚在等待之后是否真的找到了目标窗口。如果是 - 那确实是非常奇怪的行为。总之,当您调用 GetWindow 时,White 会尝试在一段时间内找到该窗口,默认为 30 秒(间隔为 200 毫秒)。所以很可能这就是你所经历的 - 白色出于某种原因找不到你的目标窗口。您可以通过以下方式配置此超时:

TestStack.White.Configuration.CoreAppXmlConfiguration.Instance.FindWindowTimeout = 0;

如果为 0,如果找不到窗口,它将立即失败。您还可以使用其他小于 30 秒的值。

关于c# - Application.GetWindow() *非常*慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com