Guten Morgen,
achtung, es kommt ein längerer Text, ich hab versucht es auf das Wesentliche zu kürzen. Hauptproblem: ich steige durch die async/await Thematik schwer
durch und zerbreche mir seit zwei Tagen den Kopf. Vielleicht hat jemand 'nen Gedanken, den er teilen kann.
Ich möchte eine exe aus dem Internet downloaden und diese anschließend öffnen. Dies geschieht über einen Download-Button, der gleichzeitig
eine Progressbar füllt. Die einzelnen Codekomponenten funktionieren soweit. Nun möchte ich einen Download-Butten drücken, der den Download
startet und die Progressbar durchläuft und DANACH die exe startet.
Mein Problem ist nun, das der Download asynchron im Hintergrund läuft und der Code schon weiterläuft zur exe, die natürlich noch nicht fertig
runtergeladen ist und die Fehlermeldung kommt, das die Exe noch nicht fertig ist.
Ich muss/möchte abfragen, "ist download fertig? - dann starte exe". Hab das mit if-abfrage versucht aber der hüpft sofort in die Abfrage und sagt wieder "Nö Download noch nicht fertig".
Zum Verständnis noch den Rest des Codes und die Funktionen:
Danke an alle die bis hierher gelesen haben
achtung, es kommt ein längerer Text, ich hab versucht es auf das Wesentliche zu kürzen. Hauptproblem: ich steige durch die async/await Thematik schwer
durch und zerbreche mir seit zwei Tagen den Kopf. Vielleicht hat jemand 'nen Gedanken, den er teilen kann.
Ich möchte eine exe aus dem Internet downloaden und diese anschließend öffnen. Dies geschieht über einen Download-Button, der gleichzeitig
eine Progressbar füllt. Die einzelnen Codekomponenten funktionieren soweit. Nun möchte ich einen Download-Butten drücken, der den Download
startet und die Progressbar durchläuft und DANACH die exe startet.
VB.NET-Quellcode
- Private Sub BtnDownload_Click(sender As Object, e As EventArgs) Handles BtnDownload.Click
- Dim urlzeile As String = "https://download.etcetc.x86_DEU.exe"
- 'Maximum der Progressbar setzen
- ProgressBar1.Maximum = GetFileSize(urlzeile)
- 'ProgressBar Fortschritt auf 0 setzen
- ProgressBar1.Value = 0
- Timer1.Enabled = True
- Task.Factory.StartNew(Function() DownloadFile())
- ' !!! Hier ist mein Problem. Code läuft ins try rein, bevor download fertig ist (logisch, is ja auch async, wa?) wie kann ich abfragen ob download durch is?
- Try
- Process.Start("C:\SQLExe-Test\sqltest.exe")
- lblStatusExe.Text = "2. Exe wird ausgeführt."
- lblStatusDownload.ForeColor = Color.Green
- Catch ex As Exception
- MessageBox.Show(ex.Message, "Exe wird nicht ausgeführt.")
- lblStatusExe.Text = "2. Exe wird nicht ausgeführt."
- lblStatusExe.ForeColor = Color.Red
- End Try
- End Sub
Mein Problem ist nun, das der Download asynchron im Hintergrund läuft und der Code schon weiterläuft zur exe, die natürlich noch nicht fertig
runtergeladen ist und die Fehlermeldung kommt, das die Exe noch nicht fertig ist.
Ich muss/möchte abfragen, "ist download fertig? - dann starte exe". Hab das mit if-abfrage versucht aber der hüpft sofort in die Abfrage und sagt wieder "Nö Download noch nicht fertig".
Zum Verständnis noch den Rest des Codes und die Funktionen:
VB.NET-Quellcode
- ''' Hier die Funktion für den asynchronen Download
- Private Function DownloadFile() As Boolean
- Dim webClient1 As New WebClient()
- webClient1.DownloadFileAsync(New Uri("https://download.etcetc.x86_DEU.exe"), "C:\SQLExe-Test\sqltest.exe")
- Return True
- End Function
- ''' Die Funktion gibt die Größe der zu downloadenden Datei zurück für die Progressbar
- Public Function GetFileSize(url As String) As Long
- Using obj As New WebClient()
- Using s As Stream = obj.OpenRead(url)
- Return Long.Parse(obj.ResponseHeaders("Content-Length").ToString())
- End Using
- End Using
- End Function
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- 'Der Timer fragt die aktuelle Größe der Datei ab und setzt den Progressbar-Fortschritt
- Dim zielzeile As String = "C:\SQLExe-Test\sqltest.exe"
- Dim info As New FileInfo(zielzeile)
- ProgressBar1.Value = info.Length
- LabStreamLength.Text = info.Length
- Application.DoEvents()
- End Sub
Danke an alle die bis hierher gelesen haben