Evento Application.Idle não dispara no aplicativo WPF
-
23-09-2019 - |
Pergunta
Estou usando um controle Windows Forms de terceiros que executa algumas ações "atrasadas" usando o evento Application.Idle.
Agora que estamos migrando nosso aplicativo para WPF, essas ações pararam de funcionar.Descobri que o evento System.Windows.Forms.Application.Idle não é gerado conforme o esperado.
Como posso fazer com que o evento Idle seja acionado em um aplicativo WPF para que eu possa continuar a usar esse controle de terceiros (dentro de um WindowsFormsHost)?Isso é não possível modificar o controle Windows Forms.
Solução
Você deveria ler esta página no MSDN que descreve o comportamento do loop de mensagens em um aplicativo WPF.Em particular, parece que a classe ComponentDispatcher pode ser usada para capturar um evento ThreadIdle que corresponderia aproximadamente ao evento Application.Idle do Windows Forms.
Você poderia então presumivelmente usar o System.Windows.Forms.Application.RaiseIdle método para gerar o evento Idle conforme o componente espera.
Outras dicas
Se você estiver usando um aplicativo WPF, na verdade não estará mais usando o System.Windows.Forms.Application Class para executar seu aplicativo, mesmo que o seu aplicativo contenha um controle do Windows Forms.
Em vez disso, você está usando o System.Windows.Application Class (espaço para nome diferente).