我有(!a.Component Up)的条件,如果它是真的那么我需要等到它起来我可以给这里检查
我做了这段代码,但它不能正常工作
if (!e.ComponentUp)
{
do
{
while (e.ComponentUp);
}
}
答案 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;
}