Frage

Hallo Ich versuche, diese Situation zu lösen. Ich habe WPF-Anwendung mit MVVM Design. Ich benutze Caliburn Micro Framework und auf Injektion MEF.

In WPF app I Verwendung Service von externer Montage. Es funktioniert gut.

Das Problem ist. Ich binde beobachtbaren Wörterbuch zu listbox. Listbox kann von 0 bis 400 Stück bestehen. Ich habe Datenvorlage auf Listbox-Elemente mit Bild und som texbox bestehen. Listbox ist wie Kontaktliste in skype oder Talk Google.

Ich rufe alle 3-4 sec Methode aus dem Dienst, Wich neue Daten als Wörterbuch zurückgibt. Ein mit diesen Daten aj Refresh-List-Feld.

Mein Code Blick in View-Modell wie folgt aus:

      private DispatcherTimer _dispatcherTimer;
            private MyObservableDictionary<string, UserInfo> _friends;
            //temp
            private MyObservableDictionary<string, UserInfo> _freshFriends;

    //bind on listbox
            public MyObservableDictionary<string, UserInfo> Friends
            {
                get { return _friends; }
                set
                {
                    _friends = value;
                    NotifyOfPropertyChange(() => Friends);
                }
            }

    //in constructor of view model I have this:
                _dispatcherTimer = new DispatcherTimer();
                _dispatcherTimer.Tick += DispatcherTimer_Tick;
                _dispatcherTimer.Interval = TimeSpan.FromSeconds(3);
                _dispatcherTimer.Start();

// on timer tick I call method from service
        private void DispatcherTimer_Tick(object sender, EventArgs eventArgs)
        {

            //get new data from server
            //method GetFriends take much of time
            _freshFriends = _service.GetFriends(Account);

            //delete old data
            _friends.Clear();

            //refresh
            foreach (var freshFriend in _freshFriends)
            {
                Friends.Add(freshFriend);

            }
        }

, sagte Wie ich, Problem ist, dass Verfahren GetFriends aus dem Dienst nehmen viel Zeit und meine App gefriert.

Wie kann dieses Problem lösen? In WinForms-Anwendung Ich Hintergrund Arbeiter verwenden, aber dies ist meine erste WPF-Anwendung mit MVVM. Es existieren jede „Patern“ oder „Design“, wie Call-Methode, die im Hinblick auf Modellklasse viel Zeit in Anspruch nehmen? Rufen Sie diese Methode in einem anderen Thread?

War es hilfreich?

Lösung

As others have suggested, you can use a BackgroundWorker in a WPF app, or if you are using .NET 4, then use the Task Parallel Library. Stephen Cleary has a nice post on the TPL compared to BackgroundWorker here - http://nitoprograms.blogspot.com/2010/06/reporting-progress-from-tasks.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top