Making progress-bar aktualisiert sich in Echtzeit in wpf

Ich habe einige Probleme bei der progress-Leiste sehen Sie die updates in Echtzeit.

Dies ist mein code jetzt

for (int i = 0; i < 100; i++)
{
     progressbar1.Value = i;
     Thread.Sleep(100);
}

Aber für einige Grund der Fortschrittsbalken zeigt an, zu leer, wenn die Funktion ausgeführt wird, und dann nichts, bis die Funktion beendet wurde. Kann mir jemand erklären, wie dies getan werden kann? Ich bin neu in C#/WPF-also ich bin nicht 100% sicher, wie ich das umsetzen würden ein Dispatcher über einen anderen thread (wie einige andere posts), um das problem zu beheben.

Klären, mein Programm hat eine Schaltfläche, die beim drücken, schnappt sich den Wert aus einem Textfeld, und verwendet eine API zum abrufen von Informationen, und erstellen Sie Etiketten, die auf ihm basieren. Ich will die Statusleiste zu aktualisieren, nachdem alle Zeilen der Daten ist abgeschlossen.

Dies ist, was ich jetzt haben:

private async void search(object sender, RoutedEventArgs e)
{
    var progress = new Progress<int>(value => progressbar1.Value = value);
    await Task.Run(() =>
    {
        this.Dispatcher.Invoke((Action)(() =>
        {
             some pre-processing before the actual for loop occur
             for (int i = 0; i < numberofRows; i++)
             {
                  label creation + adding
                  ((IProgress<int>)progress).Report(i);
             }
        }));
    });
}

Danke!

stackoverflow.com/a/22085142/906773 wäre im Grunde das, was Sie brauchen. Wenn Sie Schwierigkeiten haben, es umzusetzen, konnten Sie zeigen mehr von Ihrem code?
Loszuwerden, der Dispatcher.Invoke - alles, was Sie tun, ist die Blockierung der UI-thread für den ganzen Betrieb. Fortschritte behandeln soll, die synchronisation.
Das problem ist, dass ohne den Dispatcher.Aufrufen, wenn die Funktion versucht auszuführen, das ist, was kommt. "The calling thread cannot access this object, da in einem anderen thread gehört." Dies geschieht, wenn die Funktion versucht, zuzugreifen, was in eine textbox.
Auf welcher Linie? Machst du andere UI arbeiten dort? Add Dispatcher.Aufrufen, nur auf die Teile, die UI bezogen.
Ja, ich bin Etiketten erstellen und hinzufügen auf dem main grid. Diese verwenden auch einige externe API-tools, um Informationen zu bekommen, die geht in den label-Inhalt.

InformationsquelleAutor nonion | 2015-04-26

Schreibe einen Kommentar