6

Windows オートメーションを使用して UI をテストし、プロセスを開いたり閉じたりしています。有効な WindowHandle を取得したいのですが、Process.WaitForInputIdle() が十分に待機しません。回避策がありますが、WaitForInputIdle() が機能しない理由がわかりません。

以下は小さなコード スニップです。

Process = new Process
              {
                 StartInfo =
                 {
                     WorkingDirectory = directory,
                     FileName = EXECUTABLE_FILE_NAME
                 }
              };

Process.Start();

//Process.WaitForInputIdle() doesn't work, 
//so will use a while loop until MainWindowHandle isn't IntPtr.Zero anymore,
//or until 10 seconds have elapsed

int count = 0;

while (Process.MainWindowHandle == IntPtr.Zero && count<100)
{
    count++;
    Thread.Sleep(100);
}

AppElement = AutomationElement.FromHandle(Process.MainWindowHandle);
4

1 に答える 1

2

Chaser324 がコメントで述べたように、私の質問に対する答えはここにあります。

基本的に、「while」ループ内に Process.Refresh() への呼び出しを追加する必要があります。

于 2012-07-31T19:31:57.820 に答える