Announcement

Collapse
No announcement yet.

OnPropertyChanged feuert zu spät??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OnPropertyChanged feuert zu spät??

    Hallo,

    in meiner MVVM Anwendung nutze ich natürlich INotifyPropertyChanged usw...
    Ein TextBlock hängt somit an einem string. Sobald OnPropertyChanged aufgerufen wird, wird der Text aktualisiert, wie es soll, aber: Wenn ich direkt nach dem ändern der Property z.B. eine for-Schleife laufen lassen, wartet das Programm so lange bis die Schleife durchgelaufen ist, bevor der Text tatsächlich geändert wird. Bei Thread.Sleep() verstehe ich das noch.. aber wieso wartet er bei einer for-Schleife?

    Dispatcher.Invoke usw. helfen rein gar nichts...

    Hier mal kurzer Code:

    Code:
     App.Current.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate()
                {
                    this.StatusText = "Hallo";
    
                }));
                for (int i = 0; i < 1000000000; i++)
                {
    
                }
    Dies geht genau so wenig wie OHNE DISPATCHER!

    Was mache ich falsch??

    MfG
    Die Taschenlampe!

    Die perfekte Taschenlampe für Ihr Windows Phone!

    - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
    - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


    Hier gehts zu APP!

  • #2
    Weil nur ein Code in einem Thread laufen kann. Entweder deine Schleife oder der Paint Code des Systems. Da es zwischen setzen des textes und deiner Schleife keine Chance zum neuzeichnen gibt (heißt zum abarbeiten der Windowsmessages) wird das erst nachher erledigt wenn dein Usercode fertig ist.

    Dispatcher.Invoke würde nur helfen wenn der Code denn du zeigst in einem andern Thread als dem Hauptthread zur Ausführung kommt. Da du aber offensichtlich schon im Haputthread bist macht es überhaupt keinen Sinn nochmal mit dem Hauptthread zu synchronisieren. Synchronisierter als zum Thread gehören geht nicht.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Dispatcher.Invoke würde nur helfen wenn der Code denn du zeigst in einem andern Thread als dem Hauptthread zur Ausführung kommt.
      Das ist auch die Lösung. Die rechenintensive Arbeit (Schleife) sollte in einen separaten Thread ausgelagert werden. Damit hat der Hauptthread die Möglichkeit, die Bedienoberfläche zu aktualisieren.

      Comment

      Working...
      X