C# Wartefenster, Downloadfesnter

Gast #3061245
Lesenswert?

Hallo an alle,

ich hätte da mal ne Frage:
bitte seid nicht ganz so hart, ich programmiere jedes halbe Jahr mal ein 
bisschen. Daher bin ich da immer wieder am einfinden.

Ich habe folgendes schon funktionsfähig:
- Prüfung auf neue Version meines Programms
- Download des .msi
- Starten der Installation
************************* CODE *****************
        public static bool DownloadNewVersion()
        {
            WebClient wc = new WebClient();

            try
            {
                if (File.Exists(file)) File.Delete(file);
                if 
(System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageNam 
e  == "DE")
                {

                    //System.Threading.Thread.Sleep(1000);
                    wc.DownloadFile(InstallerFileDE, file);

                }
                else
                {


                    //System.Threading.Thread.Sleep(1000);
                    wc.DownloadFile(InstallerFileEN, file);

                }
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show(ResourcesText.DOWNLOADERROR);
                return false;
            }
            return true;

******************** CODE ENDE **************************
Problem:
-Während des Download wird nichts angezeigt, was etwas verwirrend ist.

Nun wollte ich ein zweites Fenster. Welches kurz vor Download aufgeht 
auf dem einfach steht "Bitte warten...." und sich schließt sobald der 
Download abgeschlossen ist.

Kann mir jemand hier behilflich sein?

Mit MessageBox brauche ich wieder eine Eingabe, das möchte ich nicht.
Wenn ich eine zweite Form anlege hüpfe ich dorthin aber komme nicht mehr 
zurück...?

Vielen Dank für jede Mühe schon mal
Gast #3061285
Lesenswert?

Vorschlag

blockiere das Aktuelle Fenster und zeige ein Label an
lade statt syncron asyncron runter

WebClient.DownloadFileAsync()

bei Beendigung wird ein downloadcompletet event ausgelöst danch kannst 
du das fenster wieder freigeben und das lable verstecken
1
public static void DownLoadFileInBackground2 (string address)
2
{
3
    WebClient client = new WebClient ();
4
    Uri uri = new Uri(address);
5

6
    // Specify that the DownloadFileCallback method gets called
7
    // when the download completes.
8
    client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2);
9
    // Specify a progress notification handler.
10
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
11
    client.DownloadFileAsync (uri, "serverdata.txt");
12
}
Gast #3061327
Lesenswert?

Hallo,

danke für die Vorschläge.
Das mit der Form habe ich ja schon probiert.
Wenn ich die Form aufgerufen habe zur Anzeige an dieser Stelle:
           if 
(System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageNam 
e  == "DE")
                {
                    form2.Show();
                    wc.DownloadFile(InstallerFileDE, file);

                }


Hat er den DL nicht angefangen, da er ja in der form2 war und nicht mehr 
zurück ist. Mir ist das im MOment unklar wie ich die Form aufrufe und er 
trotzdem den DL startet.
Schliessen kann ich die Form dann ja jederzeit beliebig.

DAs mit dem Label ist eine schöne einfache Sache, wenn ich es jedoch 
etwas schicker mit der Form hinbekomme, finde ich schöner.Trotzdem 
vielen Dank dafür.
Gast #3061395
Lesenswert?

So....hm.... geht nicht.... irgendwas habe ich bestimmt och verkehrt:

Hier mal den ganzen Code:

Form2 soll angezeigt werden:
************CODE ****************
class UpdateChecker
    {
public static bool DownloadNewVersion()
        {
            WebClient wc = new WebClient();

            try
            {
                if (File.Exists(file)) File.Delete(file);
                if 
(System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageNam 
e  == "DE")
                {

                    //System.Threading.Thread.Sleep(1000);
                    wc.DownloadFile(InstallerFileDE, file);

                }
                else
                {
                    cyclotest.Form2 form2 = new cyclotest.Form2();

                    form2.Show();
                    //System.Threading.Thread.Sleep(1000);
                    wc.DownloadFile(InstallerFileEN, file);

                }
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show(ResourcesText.DOWNLOADERROR);
                return false;
            }
            return true;

        }
}

********CODE ENDE**************

in der Form2 ist nur Standardcode drin:


*****************CODE************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace cyclotest
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    }

************** CODE ENDE *************
}
Gast #3061402
Lesenswert?

hehehe ... bremse gar nicht vorhanden :-D

Sorry, also er springt in die Initialisierung der form2 und dann wieder 
zurück.
Dann wenn er "form2.Show()" ausführen soll, zeigt er nur ein weisses 
Fenster ohne Inhalt und geht nicht weiter....?!
Gast #3061417
Lesenswert?

Frage

Warum hast du eine updater class wenn sie nur eine methode hat.

wenn du schon trennen willst darfst du hier aber auch keine Forms 
öffnen.

Pack das ganze in dein Hauptfenster oder trenne es von gui sachen.
Gast #3061451
Lesenswert?

hi danke

Wenn ich asynchron lade, bekomme ich einen Fehler beim starten der 
Installation.

Ich probiere und lese mich mal in den Backgroundworker ein. DEn kenne 
ich noch so nicht und da ich kein Zeitdruck habe, kann ich da was lernen 
noch dabei... hoffe ich...

Danke für die Tipps und Hilfe, hoffe es kann damit noch jemanden 
geholfen werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren