2010-02-26 16 views
5

J'utilise un contrôle Windows Forms tiers qui effectue certaines actions "retardées" à l'aide de l'événement Application.Idle.L'événement Application.Idle ne se déclenche pas dans l'application WPF

Maintenant que nous déplaçons notre application vers WPF, ces actions ont cessé de fonctionner. J'ai constaté que l'événement System.Windows.Forms.Application.Idle n'est pas déclenché comme prévu.

Comment faire pour que l'événement Idle se déclenche dans une application WPF afin que je puisse continuer à utiliser ce contrôle tiers (dans un WindowsFormsHost)? C'est pas possible de modifier le contrôle Windows Forms.

Répondre

9

Vous devez lire this page on MSDN qui décrit le comportement de boucle de message dans une application WPF. En particulier, il semble que la classe ComponentDispatcher peut être utilisée pour intercepter un événement ThreadIdle qui correspondrait à peu près à l'événement Windows Forms Application.Idle.

Vous pouvez alors probablement utiliser la méthode System.Windows.Forms.Application.RaiseIdle pour déclencher l'événement Idle tel que prévu par le composant.

+5

Merci, je ne connaissais pas ComponentDispatcher. Une ligne (ComponentDispatcher.ThreadIdle + = (expéditeur, e) => System.Windows.Forms.Application.RaiseIdle (e);) et mon problème est résolu! – Daniel

0

Si vous utilisez une application WPF, vous n'utilisez plus la classe System.Windows.Forms.Application pour exécuter votre application, même si votre application contient un contrôle Windows Forms. Au lieu de cela, vous utilisez System.Windows.Application class (espace de noms différent).

+0

Comme l'OP l'a indiqué, il se trouve dans un scénario d'interopérabilité utilisant un contrôle qui ne peut pas être modifié. – Josh