2010-05-01 7 views

Répondre

2

Vous ne pouvez pas élever le manuel de l'événement Application.Idle. Si votre objectif est de continuer à traiter les messages en boucle, vous pouvez appeler Application.DoEvents() de temps à autre au cours de la boucle, mais cela ne provoquera pas l'événement Application.Idle.

Si vous devez traiter l'événement Idle en boucle, vous pouvez exécuter votre boucle sur un thread d'arrière-plan, ce qui permettra à l'interface utilisateur de répondre.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

3

L'événement Application.Idle est soulevé par la méthode RaiseIdle(). Vous ne pouvez pas appeler vous-même directement, c'est une méthode privée. Techniquement, vous pouvez utiliser Reflection pour contourner cela.

Cependant, cela ne devrait pas fonctionner correctement, Idle a une signification très spécifique. Il est levé lorsque la boucle de messages a envoyé tous les messages en attente et qu'il n'y a plus besoin de travailler. Élever le ralenti dans une boucle n'a pas de sens, vous n'êtes pas inactif, vous êtes en boucle. Toute action effectuée par l'application dans ses gestionnaires d'événements Idle n'aura pas d'effet notable sur l'interface utilisateur. D'ailleurs, le faire en boucle n'a pas de sens non plus, une application ne peut pas être inactive plus d'une fois.

Lorsque vous envisagez d'écrire du code comme celui-ci, vous recherchez probablement Application.DoEvents().