2013-12-23 100 views
1

我有兩個方法A和B. A從內部調用B方法。 B方法無論文件是否有內容都返回true或false。下面是代碼:等方法返回true

public static void A() 
    { 
     var isValid = B(); 
     // Wait until "isValid" comes true 
     var xx = "test"; 
    } 

    public static bool B() 
    { 
     // This will check for a file content 
     // Say C://test.txt 
     // If the file has some content this method will return true else false 
    } 

我想的方法等,不執行「VAR XX =‘測試’;」除非B方法返回true。你能幫我指出一下怎麼做嗎?

編輯:我不能使用,如果循環簡單即如果(isValid),因爲內容被檢查的文件是由一些其他線程寫的,所以我需要不斷檢查B方法從A.我可以'不要讓這段代碼「var xx =」test「;」除非B返回true並且返回false,否則代碼應該在那裏等待(在var isValid = B();),除非B返回true,即代碼應該連續檢查B狀態。

+0

如果你在同一個線程上執行兩個方法,它將等到B()完成。你使用多線程嗎? –

+0

作爲一個無關的評論,你的'B'方法確認所有的數據都在文件中,而不僅僅是一些?根據文件的生成方式,您可能需要確保在文件仍在寫入時不會將文件註冊爲包含內容。 – Chris

回答

6

你應該使用while循環

while (!B()) { } 
var x = "test"; 

,直到它返回true,這將執行B中。更好的方法可能是實現一個事件,當條件變爲真時,將觸發事件。

考慮到您使用的是文件,您可以查看FileSystemWatcher,它可以在文件更改時觸發方法。

+2

特別建議將事件+1作爲更好的選項。另外,如果您需要發表評論來指出空白語句,則可以使用'{}'更好。 – Chris

0

試試這個:

if(B()) 
    var xx = "test"; 
0

試試這個

public static void A() 
    { 
     while(!B()) 
     { 
     var isValid = B(); //whatever the code 
     } 
    var xx = "test"; 
    } 
+0

爲什麼你要在循環中調用'B()'? – Chris

+0

調用被執行 –

+0

但是你已經在'while'中調用了'B()'。 'while(!B())' – Logan

3

使用與Changed事件處理FileSystemWatcher指向的對象時,該文件內容的變化(並具有變更後的內容),將被執行的方法。請參閱示例here