2010-08-19 61 views
0

我有一個condtion如果(!e.ComponentUp),如果其真正的話,我需要等待,直到它什麼檢查,我可以在這裏給條件檢查等待有利條件

我做了這個代碼,但它不是工作

if (!e.ComponentUp) 
{ 
do 
{ 
while (e.ComponentUp); 
} 
} 

回答

0

您可以在組件上創建一個名爲「UpChanged」的事件並訂閱該事件。當你看到組件處於'Up'狀態時才能運行的代碼,你可以設置一個標誌來指示你的'任務'正在等待up狀態改變。這樣的事情:

//When you initialize 
var e = ...; 
e.UpChanged += new EventHandler(Component_UpChanged); 
bool waitingForUp = false; 

//The code snippet that is waiting for up to be enabled 
if (!e.ComponentUp) 
    waitingForUp = true; 
else 
    DoWorkHere(); 

//The delegate 
void Component_UpChanged(object sender, EventArgs e) 
{ 
    if (e.ComponentUp && waitingForUp) 
      DoWorkHere(); 
    waitingForUp = false; 

} 
+0

可以填寫var e = ...; – peter 2010-08-19 10:52:36

+0

'waitingForUp'的範圍是什麼? – 2010-08-19 14:51:57

+0

@peter我不確定您在何處/如何初始化組件 @steven取決於整體應用程序設計。如果有許多不同類型的任務處於等待模式,組件本身可以封裝這個「任務註冊」邏輯。或者,調用代碼可以監視狀態。 – cordialgerm 2010-08-19 15:17:51

0

爲什麼你不使用事件?這是第三方組件嗎?

1

您的代碼無法工作。

首先,如果謂詞爲假,那麼while循環將立即退出。你需要循環否定。第二,除非它是易失性的並且被異步改變,否則循環將不會結束。

第三,這種輪詢將最大化CPU。

使用活動。

+0

你可以給我的代碼做那個事件 – peter 2010-08-19 07:01:07

+0

我想我可以。但是,我認爲這不會有幫助。 – 2010-08-19 15:06:51