2013-06-27 32 views
-1

這有點難以解釋,但我希望這個例子能夠清除它。是否可以從該方法中調用用於爲方法創建參數的函數? (C#)

說我有一些函數調用可見:一些

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

我想你也許應該使用一個事件,或者乾脆直接呼叫到任何你可以等待,直到頁面上顯示或不顯示的方法。 –

+0

你在做什麼? - WebForms包含用於PageLoaded的EventHandler - http://msdn.microsoft.com/zh-cn/library/bb397523(v=vs.100).aspx – Smartis

+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*/)); 
+0

爲什麼事件優先於上面的代碼。 – Luke101

+0

它們不會阻塞服務器上的請求線程。 –

相關問題