Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

11

02.08.2011, 15:52

So, ich habe wieder ein kleines Problem mit der ProgressBar. Eigentlich dachte ich ja wirklich, das Problem sei behoben, ich war mir sogar sicher, dass es schonmal funktioniert hat, doch gestern Abend habe ichd ann festgestellt, dass irgendwas nicht stimmt.
Also habe ich den relevanten Code einfach in ein neues Projekt gepackt, hier der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Windows.Forms;
using System.Net;
using System;
using System.ComponentModel;

namespace Testwiese
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            button1.Enabled = false;
            WebClient wc = new WebClient();
            wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
            wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
            wc.DownloadFileAsync(new Uri("http://www.sascha-simon.com/02.mkv"), "M:/02.mkv");
        }


        void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressBar1.Maximum = (int)e.TotalBytesToReceive;
            long bytesIn = e.BytesReceived;
            progressBar1.Value = (int)bytesIn;
        }

        void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            MessageBox.Show("Download fertig", "Datei erfolgreich heruntergeladen.", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }
    }
}


Das problem ist nun, dass es mir so vorkommt, dass er die Datei zuerst herunterlädt und irgendwann mitten im Download beginnt, die progresBar zu aktualisieren. Ich hatte denselben Code bereits in anderen Projekten und da hat er die ProgressBar bereits aktualisiert, wenn er nur weniges KB geladen hatte.
Ist das Programm und die pBar dann irgendwann so bei knapp 30%, springt er einfch ans Ende der Bar und das DownloadComplete-Event wird ausgeführt, sehr komisch. Er lädt anfangs tatsächlich schon ziemlich viel, ich sehe es an meiner Statusanzeige des Traffics an der Tastatur.
Nun die wie so oft alles entscheidende Frage, an was liegt das, wo hat sich der Fehler versteckt?

Zum Testen einfach neue Form, progressbar (progressBar1) und 'nen Button (button1) draufziehen.

MfG Sascha

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

12

02.08.2011, 17:18

Arbeitest Du eigentlich immer mit abgeschalteten Thread-Checks für Forms?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

13

02.08.2011, 18:16

Arbeitest Du eigentlich immer mit abgeschalteten Thread-Checks für Forms?
Da ich grad aufm Schlauch stehe bzw. generell nicht weiss, was du meinst, bejahe ich das ganze mal :O
Wie kann man das denn toll hinzufügen? Wird das problem dann behoben? :)

MfG

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

02.08.2011, 22:33

Mich wundert nur, dass Du innerhalb einer asynchronen Ausführung (WebClient) Deinen Progressbar änderst (wc_DownloadProgressChanged) ohne dass Du Exceptions bekommst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

15

03.08.2011, 07:22

Mich wundert nur, dass Du innerhalb einer asynchronen Ausführung (WebClient) Deinen Progressbar änderst (wc_DownloadProgressChanged) ohne dass Du Exceptions bekommst.
Normalerweise baue ich um sowas schon nen try-catch Block, aber hier im konkreten Beispiel habe ichs weggelassen, es funktioniert ja, nur wird eben die pBar deutlich zu spät akualisiert.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

03.08.2011, 07:30

Normalerweise solltest Du da wohl lieber mit Invoke arbeiten statt mit try/catch.
Aber wie gesagt, ich finde es spannend, dass das funktioniert (auch wenn andere Dings es nicht tun). Da stellt sich mir halt die Frage, ob Du Threadsicherheit abgestellt hast oder ob das Ding gar nicht richtig asynchron läuft, was ich aber bezweifle.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige