Bonjour!
je suis actuellement en train de coder un puissance4 en wpf.
Lorsque l'utilisateur clique sur un des boutons pour lancer un jeton, un évènement se déclenche.
Dans celui ci, le "trou" correspondant est "colorié" de la couleur du joueur; ensuite l'appel à la méthode de l'intelligence artificielle est lancé, et même démarche, le "trou" correspondant est "colorié" avec la couleur du computer.
Tout ceci se déroule sans problème, seulement j'aimerais bien effectuer une pause entre le coup du joueur et celui du pc (afin que le joueur puisse mieux visionner le coup de l'ordinateur). J'ai essayé avec un seul Thread.Sleep(time) entre les deux, mais on dirait que l'uniformGrid ne se rafraîchit qu'une seule fois en fin de traitement.
J'ai alors essayé en créant un thread, et dans ce thread j'effectue un InvalidateVisual(), mais le jeton du joueur apparaît encore tout à la fin en même temps que celui du computer.
voici le code de l'évènement (les parties "importantes" et en simplifié)
voici le code du thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // colorier le mouvement du joueur arrayImage[i, colonneBouton].Encoche.Fill = ColorPlayer; // le thread Thread t = new Thread(new ThreadStart (threadContent) ); t.Start(); Thread.Sleep(1500); // l'ai et colorier le mouvement du computer gameAI.Movement(); arrayImage[arrayAINumero[0, 0], arrayAINumero[0, 1]].Encoche.Fill = ColorComputer;
Quelqu'un aurait il une idée/solution pour que l'uniformGrid puisse se rafraîchir/redessiner en milieu de traitement??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void threadContent() { // j'ai aussi essayé avec gridPlateau.InvalidateVisual(), ça ne marche pas (gridPlateau étant le nom de mon uniformGrid) this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() => { InvalidateVisual(); })); }
En espérant avoir été clair, d'avance merci!
Partager