c# progressbar nicht aktualisiert

Ich habe eine ProgressBarWindow die eine progressbar und eine Abbrechen-Schaltfläche, die ich nutzen, um Fortschritte auf Datei-I/O. Jedoch im UI-Thread der ProgressBarWindow und mein Hauptfenster beide hängen trotz all der Arbeit in einem backgroundworker. Die progressbar dargestellt wird, als ist mein main-Fenster, aber nicht aktualisiert, während der backgroundworker seine Sache macht.
Der folgende code aufgerufen wird am Ende der Konstruktor des Hauptfensters:

iCountLogLinesProgressBar = new ProgressBarWindow();
iCountLogLinesProgressBar.cancelButton.Click += EventCountLogLinesProgressBarCancelButtonClicked;
iCountLogLinesProgressBar.Show();

iCountLogRecords = new BackgroundWorker();
iCountLogRecords.DoWork += EventCountLogLinesDoWork;
iCountLogRecords.ProgressChanged += EventCountLogLinesProgressChanged;
iCountLogRecords.RunWorkerCompleted += EventCountLogLinesRunWorkerCompleted;
iCountLogRecords.WorkerReportsProgress = true;
iCountLogRecords.WorkerSupportsCancellation = true;
iCountLogRecords.RunWorkerAsync(new BinaryReader(File.Open(iMainLogFilename, FileMode.Open, FileAccess.Read)));

EventCountLogLinesProgressChanged() sieht wie folgt aus:

private void EventCountLogLinesProgressChanged(object sender, ProgressChangedEventArgs e)
{
    iCountLogLinesProgressBar.Value = e.ProgressPercentage;
}

Hier ist eine verkürzte version von ProgressBarWindow(der rest ist nur ein paar setter):

public partial class ProgressBarWindow : Window
{
    public ProgressBarWindow()
    {
        InitializeComponent();
        this.progressBar.Value = this.progressBar.Minimum = 0;
        this.progressBar.Maximum = 100;
    }

    public double Value
    {
        get
        {
            return progressBar.Value;
        }
        set
        {
            this.progressBar.Value = value;
        }
    }
} 

Habe ich versucht, das einwickeln der Wert setter-Linie in einen dispatcher.aufrufen delegieren, aber das gibt mir ein stack-overflow(ich sollte nicht zu haben, einen dispatcher.invoke-Linie eh als backgroundworker ruft ProgressChanged in der UI-Thread, richtig?). Ich habe in msdn und gegoogelt, aber ich kann nicht scheinen, um herauszufinden, jemand anderes mit diesem problem.

BEARBEITEN Entschuldigung, ich wusste nicht, mein vereinfachter code blockiert den UI Thread, bekomme ich genau das gleiche Verhalten, ungeachtet einer mit einem backgroundworker, so dass ich irrtümlich davon ausgegangen, dass Sie gleichwertig waren. Ich sollte erwähnt haben, dass ich mit einem backgroundworker 😛

InformationsquelleAutor CalumMcCall | 2010-08-02
Schreibe einen Kommentar