Laden...

backgroundWorker Problem!

Erstellt von wizer vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.637 Views
W
wizer Themenstarter:in
196 Beiträge seit 2007
vor 16 Jahren
backgroundWorker Problem!

Hi. Ich hab mir einen Updater gemacht, der ladet bestimmte datein runter und soll in einer progressBar den aktuellen Stand zeigen. Das ganze habe ich etwas umständlich gemacht, aber es müsste funktionieren.

private void button2_Click(object sender, EventArgs e)
        {
            WebRequest request = WebRequest.Create(ini_community_url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            double groeße = response.ContentLength;
            response.Close();

            progressBar1.Maximum = Convert.ToInt32(groeße);
            button2.Enabled = false;

            backgroundWorker1.RunWorkerAsync();
            backgroundWorker1.WorkerReportsProgress = true;            

            //tmpDaten löschen
            //File.Delete(tempcommunity);             
        }
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            string pfad = Application.StartupPath + "\\Downloads\\Gothic_3_Community_Patch_v1.4.exe";
            FileInfo fi = new FileInfo(pfad);
            double lenght = fi.Length;            
            backgroundWorker1.ReportProgress(Convert.ToInt32(lenght));
        }        

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string pfad = Application.StartupPath + "\\Downloads\\Gothic_3_Community_Patch_v1.4.exe";
            timer1.Enabled = true;
            WebClient wc = new WebClient();
            wc.DownloadFile(ini_community_url, pfad);            
        }

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

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            timer1.Enabled = false;
            button2.Enabled = true;
        }

Ich finde jedoch nicht den Fehler, da sich der progressBar nicht verändert! Könnt ihr mir vielleicht weiterhelfen?

EDIT: Hab das Problem indentifiziert, der Timer wird nicht aktiviert! aber warum nicht?

A
254 Beiträge seit 2007
vor 16 Jahren

Hallo,

finde auf den ersten Blick kein timer1.Start().

Ich denke, dass Du mit der Enabled, dies bewerkstelligen willst. Meiner Meinung geht das nicht. Weiss allerdings nicht was die Enabled Eigenschaft beim Timer genau macht.

Vielleicht einfach mal mit Start / Stop probieren.

Tschüss

S
489 Beiträge seit 2007
vor 16 Jahren
  • Timer.Enable auf true setzen sollte funktionieren
  • den Worker würde ich erst konfigurieren, dann starten, nicht so wie hier
  • ansonsten sollte das so eigentlich funktionieren, haste mal probiert ob Du ohne den Timer und ohne den Worker die Datei herunterladen kannste?
  • dann gibt's noch ein Problem, wenn die DoWork-Methode abgelaufen ist wird sofort das RunWorkerCompleted-Event gefeuert. Dabei ist völlig egal, ob der Timer noch läuft, suche hier mal nach thinBackgroundWorker, das ist mein Spezialworker der dieses Problem umgehen kann.
2.921 Beiträge seit 2005
vor 16 Jahren

@a957m: Mit der Methode enabled erreicht man, dass Start aufgerufen wird (das habe ich schon mal mit dem Reflector in Erfahrung gebracht).

Das sollte also zumindest nicht der Fehler sein

Probiers mal mit den Async-Methoden.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.