C# Wartefenster, Downloadfesnter

Gast #3061245
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
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
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 #3061364
Wenn du aber eh vor hast den ganzen status darzustellen dann könntest du 
die Form schon vorher aufrufen bevor du deine Prüfungen durchführst und 
die Ergebnisse anzeigen.
Gast #3061365
Sebastian-L schrieb:
> Das kann nicht sein.

Hi,

ok, hast recht er macht es richtig. Aber meine Form2 wird nicht richtig 
angezeigt.....
Ich hatte gerade aus Versehen Form2.ShowDialog(); drinne ...... dann ist 
klar dass er hier etwas haben will und stehen bleibt.

Ich probiere es nochmal......
Gast #3061395
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
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 #3061406
Mach mal einen Brechpunkt und prüfe ob er wirklich nicht weiter geht

wenn er weiter geht und das fenster weiß bleibt sieh meinen post weiter 
oben
Gast #3061417
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
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.
Gast #3062630
Sebastian-L schrieb:
> Welchen Fehler (verdammt)

HI sorry,

ich bekam den Fehler dass meine Updatedateinstallationsdatei nicht für 
mein System ist. Quasi die gleiche Meldung von Windows, wenn man eine 
64-bit Version auf einem 32-bit installiert.

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.