2010-08-19 4 views

Répondre

0

Vous pouvez créer un événement sur votre composant appelé quelque chose comme «UpChanged» et vous abonner à l'événement. Quand vous arrivez au code qui ne peut s'exécuter que lorsque le composant est dans l'état 'Up', vous pouvez définir un drapeau qui indique que votre 'tâche' attend que l'état 'up' change. Quelque chose comme ceci:

//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

pouvez-vous remplir var e = ...; – peter

+0

Quelle est la portée de 'waitingForUp'? –

+0

@peter Je ne sais pas où/comment vous initialisez votre composant @steven dépend de la conception globale de l'application. Le composant lui-même pourrait encapsuler cette logique "d'enregistrement de tâche" s'il y a beaucoup de différents types de tâches qui sont dans le mode d'attente. Ou, le code appelant pourrait surveiller l'état. – cordialgerm

0

Pourquoi n'utilisez-vous pas les événements? Est-ce un composant tiers?

1

Votre code ne peut pas fonctionner. Premièrement, si le prédicat est faux, alors la boucle while va quitter immédiatement. Vous auriez besoin de boucler sur la négation. Deuxièmement, à moins qu'elle ne soit volatile et qu'elle soit modifiée de manière asynchrone, la boucle ne se terminera pas. Troisièmement, ce type d'interrogation maximisera le processeur.

Utilisez un événement.

+0

pouvez-vous me donner le code pour faire cet événement – peter

+0

Je suppose que je pourrais. Cependant, je ne pense pas que cela sera utile. –