-1

これを説明するのは少し難しいですが、この例で解決できることを願っています。

関数呼び出し Visible があるとします。

public bool Visible(/* Some page element */)
    {
        // Checks if something on a webpage is visible. Returns a "true" is yes, and "false" if not
    }

この関数がtrueを返すのを待つ方法はありますか? 今まで書いてきた内容はこんな感じです。

    public void WaitUntil(/*function returning bool*/ isTrue)
    {
        for (int second = 0; ; second++)
        {
            if (second >= 12)
            {
                /* Thow exception */
            }
            else
            {
                if (isTrue /*calls the isTrue function with given parameters*/)
                {
                    return;
                }
            }
        }
    }

これらの 2 つの方法は、次のように一緒に使用できます。

WaitUntil(Visible(/* Some page element */));

ページ要素が表示されるまで待つ...これは可能ですか?

4

1 に答える 1

2

これを行う方法は次のとおりです(ただし、この種の「待機」は強く推奨されないため、イベントの使用を検討する必要があります)

/*Important Note: This is ugly, error prone 
          and causes eye itchiness to veteran programmers*/
public void WaitUntil(Func<bool> func)
{
    DateTime start = DateTime.Now;
    while(DateTime.Now - start < TimeSpan.FromSeconds(12))
    {
        if (func())
        {
                return;
        }
        Thread.Sleep(100);
    }
    /* Thow exception */
}

//Call
WaitUntil(() => Visible(/* Some page element*/));
于 2013-06-27T11:59:23.650 に答える