这有点难以解释,但我希望这个例子能够清除它。
说我有一些函数调用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;
}
}
}
}
这样两种方法可以一起使用,如:
WaitUntil(Visible(/* Some page element */));
等待页面元素可见......这可能吗?
答案 0 :(得分: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*/));