2010-08-11 6 views
4

J'ai un problème similaire à ce question en ce qui concerne la peinture des contrôles WPFWinforms WPF Interop - contrôles WPF inactivés

L'application que je travaille sur est une application assez grandes formes de Windows filetées avec plusieurs WPF contrôles utilisateur dans l'application. Le problème se produit dans un plugin de l'application où une bibliothèque C++ tierce est appelée sur un thread séparé, WndProc est surchargé pour obtenir les mises à jour de progression de la bibliothèque tierce. Je n'ai pas encore déterminé le scénario exact qui provoque le problème, mais similaire à la question ci-dessus, après quelques exécutions, les contrôles wpf ne parviennent pas à peindre et à mettre à jour.

La définition de la largeur des élémentshost résout le problème de peinture de la plupart des contrôles, mais après cela, tous les contrôles wpf de l'application ne répondent plus - visuellement ... les barres de progression ne la valeur ne change pas), les barres de défilement ne répondent pas, sélectionner un élément dans la liste ne le met pas en surbrillance (il est mis en surbrillance après le redimensionnement et il est effectivement sélectionné - vous pouvez juste voir qu'il est sélectionné) redimensionnement, il montre seulement un fond noir où l'arborescence devrait être (bien que lorsque je clique sur les éléments où ils devraient être dans l'arborescence, les événements sont déclenchés)

Je sais que je devrais probablement trouver la racine du problèmes qui provoque cela en premier (son ouverture est plutôt aléatoire et difficile à piéger) - bien que mettre un point d'arrêt dans la méthode WndProc semble faire échouer sur une base régulière ...

Ce que j'espérais, c'est un moyen de 'réactiver'/rafraîchir tous les autres contrôles tout au long de l'application ... Je suis un développeur wpf, C# intermédiaire et ne sais pas encore assez sur la messagerie et les événements qui se passe en arrière-plan pour les utiliser efficacement ... ma pensée est que certains événement ou message qui dit à wpf de redessiner doit être cassé ou interrompu ou quelque chose - comment puis-je déterminer ce qui est cassé et peut-être le réactiver?

Tout conseil sera apprécié ...

Merci Vous

+0

J'ai réussi à affiner ce qui a causé le problème. Une barre de progression WPF personnalisée a été mise à jour à plusieurs reprises depuis la méthode WndProc, lorsque cette mise à jour a été supprimée aucun problème avec d'autres contrôles wpf ... J'ai résolu ce problème en supprimant le contrôle wpf incriminé et en mettant en place un contrôle Windows Forms. Cela ne résout cependant pas la question de savoir pourquoi le problème s'est produit et ce qui peut être fait pour l'empêcher ... Je vais faire d'autres tests et tester des applications pour essayer de le déterminer. – skitnica

Répondre

0

Il se pourrait que l'événement qui cause le graphe de contrôle WPF est render jamais en cours de traitement à cause de cette dérogation WndProc.

Étant donné que vous interagissez avec WinForms, vous pouvez forcer le traitement des événements en appelant à Application.DoEvents(); quelque part. Peut-être après avoir mis à jour la barre de progression.