wpf dispatcher Problem



  • Hi,

    ich habe folgenden code:

    AuftragsHolder.Children.Clear();
                for (AuftragsCounter = 0; AuftragsCounter < sm.AuftragsListe.Count; AuftragsCounter++)
                {
                    Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Action(delegate()
                    {
                        AuftragsViewCTRL aCTRL = new AuftragsViewCTRL();
                        aCTRL.Auftrag = sm.AuftragsListe[AuftragsCounter];
                        aCTRL.EditTaskClicked += new EventHandler(aCTRL_EditTaskClicked);
                        aCTRL.MaximizedClicked += new EventHandler(aCTRL_MaximizedClicked);
                        AuftragsHolder.Children.Add(aCTRL);
                        Auftraege.ListToUpdate.Add(aCTRL);
                    }));
                }
    

    Für jeden Auftrag zu einem Benutzer wird dem Layout ein Auftrags-Control hinzugefügt. Durch den dispatcher baut sich die Oberfläche langsam auf.
    Funktioniert auch ganz gut.

    Problem aber ist, wenn ich den Benutzer wechsle, und es wurden noch nicht
    alle Controls hinzugefügt, werden alle Aufträge vom neuen Benutzer geladen,
    und zusätzlich die Aufträge vom alten benutzer die noch nicht dem Layout
    hinzugefügt wurden. Wie kann ich das verhindern?



  • Ich habe es jetzt folgendermaßen gelöst:

    public void Update()
            {
                AuftragsHolder.Children.Clear();
                for (Auftraege.AuftragsCounter = 0; Auftraege.AuftragsCounter < sm.AuftragsListe.Count; Auftraege.AuftragsCounter++)
                {
                    AuftragsHolder.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Action(delegate()
                    {
                        if (!AuftragsHolder.Dispatcher.HasShutdownStarted)
                        {
                            if (dobreak)
                            {
                                Update();
                                dobreak = false;
                            }
                            AuftragsViewCTRL aCTRL = new AuftragsViewCTRL();
                            aCTRL.Auftrag = sm.AuftragsListe[Auftraege.AuftragsCounter];
                            aCTRL.EditTaskClicked += new EventHandler(aCTRL_EditTaskClicked);
                            aCTRL.MaximizedClicked += new EventHandler(aCTRL_MaximizedClicked);
                            AuftragsHolder.Children.Add(aCTRL);
                            Auftraege.ListToUpdate.Add(aCTRL);
                        }
                    }));
                }
            }
    

Log in to reply