Salut à tous!
Après de nombreuses recherches infructueuses, je m'en remet à vous...
Voici mon problème :
J'ai un thread principal dans lequel je fais des modifications (dessin, zoom, décalage...) sur le graphics d'un BufferedGraphics.
Les méthodes de transformation ne se trouvent pas dans la forme mais sont déporté dans d'autre controleurs.
Voici les intéractions (Evenementielles) :
* Mouvement de la souris : Décalage d'un objet sur le graphics
La forme envois un évènement au "controleur principale" qui lui avertit le "controleur de déplacement" qu'il y a un déplacement (par un évènement)
Il fait les décalages nécessaires et applique les transformations et prévient le "controleur principale" que le graphics a été modifié pour qu'il soit redessiné
* Action au clic : Zoom et dé-zoom de l'objet de facon dynamique ( le zoom se lance dès qu'un clic de souris est detecté)
La forme envois un évènement au "controleur principale" qui lui avertit le "controleur de zoom" qu'il y a un lancement du zoom dynamique (par un évènement)
A partir de cet instant, Un Timer permet à chaque tick ( à partir d'un interval donné ) de modifier la valeur de zoom
Il applique ensuite la nouvelle valeur de zoom et prévient le controleur principale que le graphics a été modifié
Le problème est le suivant :
Quand on zoom ET quand on déplace l'objet sur le graphics EN MEME TEMPS, l'objet n'est plus zoomé ( ou saccade...)
On s’aperçoit que dès qu'on déplace l'objet de plus en plus vite, les sacades sont de plus en plus présentes jusqu'à stoper ( DE FACON VISUELLE) le zoom... Le zoom devrait continuer...
Dès qu'on ralentit le déplacement de l'objet, on peut remarquer que l'objet recommence à s'agrandir.
Cause : Tous les traitements sont fais dans le MEME thread
La pile d'évènements est inondé par des évènements de déplacements ce qui bloque la réalisation des évènements de zoom puisque tous les évènements et traitements sont réalisés dans le même thread (Pareil pour la gestion du tick du zoom dynamique).
Arborescence des contrôleurs
Forme
--> Controleur principale (PAS D'ACCES A LA FORME...)
----Création d'un bufferedGraphics : On applique les transformation sur le Graphics de ce buffer
-----> Controleur Graphique
--------> Controleur de zoom
--------> Controleur de déplacement
-----> D'autre Controleur inutile ici...
Question :
Toutes les communications entre les controleurs graphiques (ZoomControleur, OffsetControleur, ...) sont fait par des évènements.
Serait-il possible de faire communiquer ces évènements avec le thread principale (Controleur principale) si ces controleurs sont threadés (sachant que l'on a pas accès ici à la form...).
Ce q'on recherche à faire, c'est de lancer un thread qui s'occupera du timer et que celui ci, à chaque intervale, lance un évènement vers le controleur de zoom qui lui se trouverait dans le thread principal.
Ce que nous trouvons actuellement sur le web, c'est de faire un appel asynchrone depuis le thread principal (BeginInvoke), et "d'attendre" la réponse de celui ci (EndInvoke sur la méthode de callback...)
Mais rien de marche jusqu'à présent...
...Soit on est des burnes ! ou pire....![]()
Partager