Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

BackgroundWorker with WPF

$
0
0

Hello all!

I would like to draw a ProgressBar during the execution of my algorithms and display my map on the window.

I follow this tutorial : http://elegantcode.com/2011/10/07/ex...busyindicator/

But when my BackgroundWorker ended, my window is stille the same without my map...

However I don't understand because I use the dispatcher to change UI.

Below my code :

 /// <summary>
        /// When the window is built
        /// </summary>
        /// <param name="sender">Fenêtre construite</param>
        /// <param name="e">Evènement</param>
        private void Window_Loaded(object sender, RoutedEventArgs r)
        {
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += (o, ea) =>
            {
                 //Take time 
                Createur_Partie createur = new Createur_Partie();
                createur.construirePartie(_joueurs, _grande);
                _partie = createur._monteur._partie;
                affichageMap();
            };
            worker.RunWorkerCompleted += (o, ea) =>
            {
                busyIndicator.IsBusy = false;
                //On met à jour les informations sur les joueurs dans la partie de droite de la fenêtre
                //updateInfoJoueurs();
                //On ajoute un observateur à notre partie
                // _partie.PropertyChanged += new PropertyChangedEventHandler(changement_partie);
                 //_partie.debut();
            };
            worker.RunWorkerAsync();
        }
        private void affichageMap()
        {
            Carte map = _partie._carte;

            for (int c = 0; c < map._largeur; c++)
            {
                Dispatcher.Invoke((Action)(() => mapGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(50, GridUnitType.Pixel) })));

            }
            Console.WriteLine(10);
            for (int l = 0; l < map._hauteur; l++)
            {
                Dispatcher.Invoke((Action)(() => mapGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(50, GridUnitType.Pixel) })));
                for (int c = 0; c < map._largeur; c++)
                {
                    Rectangle r = null;
                    //On crée un rectangle pour case représentant les ressources
                    r = createCase(c, l, map.getCase(c, l));
                    Dispatcher.Invoke((Action)(() => mapGrid.Children.Add(r)));

                    //On crée une ellipse donnant une information rapide sur le nombre de troupes situé sur la case
                    Dispatcher.Invoke((Action)(() => mapGrid.Children.Add(createEllipseUnite(c, l, r))));
                    foreach (Unite u in map.getCase(c, l).Unites)
                    {
                        Dispatcher.Invoke((Action)(() => mapGrid.Children.Add(affichageUnite(u, u.getType()))));
                    }
                }
            }
        }

Thank you for advance


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>