У меня есть следующие два метода, которые я вызываю в последовательности (с соответствующим полем уровня класса в последовательности)
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()
, но с тем же результатом.
Есть ли у кого-нибудь какие-либо мысли о том, как я мог бы сократить это время или, по крайней мере, определить, что так долго? Я не состою в браке с реализацией, которую у меня есть на любом участке - независимо от того, что делает мне этот оконный объект в порядке со мной.
Update:
Чтобы рассмотреть комментарии до сих пор, я изменил код, чтобы попытаться устранить как можно больше других проблем.
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");
}
Я включил перечислимую оценку, чтобы исключить любое отложенное выполнение. И я попробовал это как с моим приложением, так и с блокнотом. Вышеприведенный код, как для моего приложения, так и для блокнота, выполняет первые три строки сразу в отладчике, а затем занимает слишком много времени на последнем в обоих случаях.
(Кажется возможным, что белые могли бы отложить выполнение Application.Attach
, но я не очень разбираюсь в этом инструменте, так что это очень непрозрачно для меня.)
Второе обновление:
Здесь разбивается время, проведенное в методе GetWindow(). Приложение потратило около 10% времени в GetWindow(), поэтому более половины этого времени потрачено в WaitTillFound() и почти все из этого метода Retry(). Любые мысли о том, как уменьшить это время (или сократить время, затрачиваемое на конструктор Window после его обнаружения)?