Update der progressbar-von einem backgroundworker in WPF
Ich versuche, mich ein progressbar zuvor mit einem BackgroundWorker
. Das Ziel ist, zu zeigen, in dem der Fortschritt der hintergrund zu suchen, aber ich will zuerst kennen zu lernen, den Fortschritt-bar, indem Sie eine einfache simulation. Dies ist der code:
public MainWindow()
{
InitializeComponent();
worker = new BackgroundWorker(); //variable declared in the class
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Title += " DONE";
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
for(int j = 0; j <= 100; j++)
{
worker.ReportProgress(j);
Title += j.ToString();
Thread.Sleep(50);
}
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
searchProgressBar.Value = e.ProgressPercentage;
}
Aber wenn ich es starten, er springt dann rechts bis zum Ende, ohne dass die progressbar in keiner Weise. Wenn ich Debuggen Schritt-für-Schritt, der Letzte Schritt, den ich bekommen ist worker.ReportProgress(j);
, dann wird die Kontrolle wieder an das Programm und die worker_RunWorkerCompleted
genannt wird. Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Fall, dass Sie versuchen, zu ändern die
UI content
haben, sollten Sie die Anrufe aufUI Dispatcher
. Siecan't modify UI objects from background thread
. Ersetzen Sie Ihre Linien mit diesen -und
Sie vergessen haben, führen die Arbeiter: