有条件的检查等待有利条件

时间:2010-08-19 06:45:49

标签: c#

我有(!a.Component Up)的条件,如果它是真的那么我需要等到它起来我可以给这里检查

我做了这段代码,但它不能正常工作

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

3 个答案:

答案 0 :(得分:1)

您的代码无法使用。

首先,如果谓词为false,则while循环将立即退出。你需要循环否定。

其次,除非它是易失性的并且异步更改,否则循环不会结束。

第三,这种轮询将最大化CPU。

使用活动。

答案 1 :(得分:0)

你为什么不使用活动?这是第三方组件吗?

答案 2 :(得分:0)

您可以在Component上创建一个名为'UpChanged'的事件并订阅该事件。当您遇到只能在组件处于“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;

}