Hey zusammen!
Ich hätte da mal eine Frage. Und zwar habe ich mir eine Downloadklasse geschrieben, wobei pro Download ein eigener Thread ein Objekt dieser Klasse erzeugt und den Download somit startet.
Beim folgenden Code werden bekannterweise die Eventhandler angelegt.
WebClient client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
Ich mache nun folgendes:
private void DownloadProgressChanged(Object sender, DownloadProgressChangedEventArgs e)
{
_ProgressBarValue = e.ProgressPercentage;
updateProgressBarDelegate d = updateProgressBar;
_PbarDownloadItem.Invoke(d);
}
private void DownloadFileCompleted(Object sender, AsyncCompletedEventArgs e)
{
disposeDownloadDelegate d = disposePanelDownloadItem;
_PanelDownloadItem.Invoke(d);
}
private void updateProgressBar()
{
_PbarDownloadItem.Value = _ProgressBarValue;
}
private void disposePanelDownloadItem()
{
_PanelDownloadItem.Dispose();
}
Und zwar kann ich aufgrund der Threads nicht auf meine Progressbar zugreifen. Verständlich und über Delegates soweit gelöst.
Jetzt habe ich aber das Problem, dass der Download bei 100% ist, die Progressbar aber immer erst bei der Hälfe - 3/4 der Anzeige. Könnte das durch die Threads kommen? Oder mache ich vom Denken her einen Fehler und bin vielleicht viel zu umständlich an die Sache rangegangen?
Zur Erläuterung: Die Progressbar liegt auf einem Panel. Dieses wird beim beenden des Downloads einfach gelöscht, so dass die Progressbar usw. wieder verschwindet. Doch momentan verschwindet sie noch viel zu früh bzw. ich habe mir über die Messagebox mal ausgeben lassen wann die 100% erreicht sind und das passte definitiv nicht zu dem, was die Progressbar anzeigt.
Vielen Dank für eure Hilfe,
Manuel