Fortschritt-bar nicht immer aktualisiert auf WPF-Benutzeroberfläche

Ich verwende folgenden code um den Fortschritt anzuzeigen status bar in WPF (MVVM) - app, die im Grunde auf einen thread, aber wenn ich sage, die auf einem dispatcher-thread-status nicht aktualisiert UI.

Mit Gewinde:

Main()
    {


      Thread LoadApp = new Thread(MyData);
            LoadApp.Start();
    }

public void MyData()
{
        ProgMessage = "10%";
        ProgValue = 10;
        var varAction = new List<Func<object>>();
        varAction .Add(() => (MainViewMode1)ViewModel1.ViewModel1);
        varAction .Add(() => (MainViewMode2)ViewModel2.ViewModel2);
        varAction .Add(() => (MainViewMode3)ViewModel3.ViewModel3);

        foreach (var action in varAction )
        {
            var obj = action();
            ProgressMessage = //My message from VM
            ProgressBarValue += //My message valuefrom VM;
        }

}

Dies ist in Ordnung, aber da jetzt bin ich mit Abhängigkeitseigenschaft ich habe das cross-threading Ausnahme (STA), also änderte ich den code, um:

Main()
{

           Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
            {
               MyData();

            }));

}



 public void MyData()
    {
            ProgMessage = "10%";
            ProgValue = 10;
            var varAction = new List<Func<object>>();
            varAction .Add(() => (MainViewMode1)ViewModel1.ViewModel1);
            varAction .Add(() => (MainViewMode2)ViewModel2.ViewModel2);
            varAction .Add(() => (MainViewMode3)ViewModel3.ViewModel3);

            foreach (var action in varAction )
            {
                var obj = action();
                ProgressMessage = //My message from VM
                ProgressBarValue += //My message valuefrom VM;
            }

   }

Ich jetzt loswerden threading-Fehler, aber nicht die Aktualisierung der Statusanzeige-status auf UI ?

Jeder Hinweis auf diese ?

  • Haben Sie mit dem data-binding? Wenn es so ist, dann müssen Sie einige XAML-Code zeigt, wie binden Sie die ProgressBar-Komponente viewmodel
  • Ja. Ich bin mit der Datenbindung.Der Xaml-code: <dxe:ProgressBarEdit Name="ProgressBar" Minimum="0" Maximum="100" ContentDisplayMode="Wert" DisplayFormatString="{}{0}%" Value="{Binding ProgressBarValue}" > </dxe:ProgressBarEdit> <TextBlock Text="{Binding ProgressMessage}" />
  • Setzen Sie einen Haltepunkt in der foreach-Schleife und sehen, ob die Werte updateing in diesen beiden Eigenschaften . Wenn Sie sind, dann stellen Sie sicher, dass Sie benachrichtigt werden die änderungen und Ihre Bindung korrekt ist
  • Ja, diese Eigenschaften sind immer aktualisiert, aber seit ich ihn auf disptacher Sie sind nicht reflektiert wird in der Benutzeroberfläche . Bcoz gleiche Arbeit im Fall des Durchzugs.
  • Haben Sie sich auf die Progressbar.ReportsProgress?
InformationsquelleAutor user2519971 | 2013-12-31
Schreibe einen Kommentar