Problem mit einem YouTube Downloader (Progressbar und DownloadingFile)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Problem mit einem YouTube Downloader (Progressbar und DownloadingFile)

    Hi Leute

    ich habe mich mal ran gemacht einen YouTube Downloader zubauen funktioniert auch alles super :)
    Aber ich habe ein Problem oder zwei also wenn ich auf den Button zum Downloaden(Button1) klicke soll
    er den Button ausblenden solange bis die Progressbar auf 100% ist. Zusätzlich soll er ein Label(Label2) erscheinen lassen das bei Klick von Button erscheint das geht auch schon aber wieder rum bei 100 % wieder verschwindet. Und wenn ich schon dabei bin vlt kann mir auch einer mit einer Proxy Einstellung helfen. Ich hoffe ihr könnt mir helfen vielen Dank im Voraus.

    Hier ein teil des Codes solltet ihr alles brauchen sagt bescheid

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
    2. System.EventArgs) Handles Button1.Click
    3. Button1.Enabled = False
    4. Label2.Visible = True
    5. ProgressBar1.Text = CInt(ProgressBar1.Value / ProgressBar1.Maximum * _
    6. 100).ToString
    7. request = DirectCast(HttpWebRequest.Create(TextBox1.Text), _
    8. HttpWebRequest)
    9. response = DirectCast(request.GetResponse, HttpWebResponse)
    10. source = New StreamReader(response.GetResponseStream, _
    11. System.Text.Encoding.Default).ReadToEnd
    12. If source.IndexOf("video_id") > -1 Then
    13. Dim signature As String = source
    14. signature = System.Text.RegularExpressions.Regex.Split(signature, ( _
    15. ChrW(34) + "fmt_url_map" + ChrW(34) + ": " + ChrW(34)))(1)
    16. signature = signature.Remove(0, 5)
    17. signature = signature.Replace("%252C", ",")
    18. signature = signature.Replace("%2F", "/")
    19. signature = signature.Replace("%3D", "=")
    20. signature = signature.Replace("%3F", "?")
    21. signature = signature.Replace("%3A", ":")
    22. signature = signature.Replace("%26", "&")
    23. Dim sig2 As String = signature
    24. sig2 = sig2.IndexOf("http", 30)
    25. signature = signature.Remove(sig2, signature.Length - sig2)
    26. signature = signature.Remove(signature.IndexOf("%"), 7)
    27. signature = signature.Replace("%", "")
    28. If signature.Chars(signature.Length - 1) = "C" Then
    29. signature = signature.Remove(signature.Length - 1, 1)
    30. End If
    31. BackgroundWorker1.RunWorkerAsync()
    32. downloadurl = signature.ToString()
    33. request2 = DirectCast(HttpWebRequest.Create(signature), _
    34. HttpWebRequest)
    35. response2 = DirectCast(request2.GetResponse, HttpWebResponse)
    36. If response2.ContentType = "video/x-flv" Then
    37. SaveFileDialog1.Filter = "FLV Files (.flv) |*.flv"
    38. ElseIf response2.ContentType = "video/mp4" Then
    39. SaveFileDialog1.Filter = "MP4 Files (.mp4) |*.mp4"
    40. Else
    41. MsgBox("Es ist ein Fehler aufgetreten, und die angeforderte" & _
    42. "Datei (en) konnte nicht heruntergeladen werden." + vbCrLf + _
    43. "Dies wird normalerweise durch Änderungen an der You-Tube" & _
    44. "Website verursacht.", MsgBoxStyle.Critical)
    45. Exit Sub
    46. End If
    47. If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    48. BackgroundWorker1.RunWorkerAsync()
    49. Else
    50. MsgBox("Download abgebrochen!")
    51. End If
    52. Else
    53. MsgBox("Error! Bitte überprüfen Sie die Video-URL!")
    54. End If
    55. End Sub
    56. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As _
    57. System.EventArgs) Handles TextBox1.TextChanged
    58. If TextBox1.Text = "" Then
    59. Button1.Enabled = False
    60. Label2.Visible = False
    61. End If
    62. End Sub
    63. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e _
    64. As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    65. web.DownloadFileAsync(New Uri(downloadurl.ToString), _
    66. SaveFileDialog1.FileName)
    67. End Sub
    68. Public Sub DownloadingFile(ByVal sender As Object, ByVal e As _
    69. DownloadProgressChangedEventArgs) Handles web.DownloadProgressChanged
    70. Dim deleg As New OneArgD(AddressOf SetValue)
    71. ProgressBar1.Invoke(deleg, e.ProgressPercentage)
    72. If e.ProgressPercentage = 100 Then
    73. MsgBox("Download ist beendet.")
    74. Button1.Enabled = True
    75. Label2.Visible = False
    76. End If
    77. End Sub
    Wenn du einen asynchronen Download verwendest, brauchst du keinen Backgroundworker. Statt die ProgressBar als Indikator zu nehmen, solltest du den Button wieder einschalten, wenn das DownloadCompleted (o.ä.) event eintritt, bzw wenn ein Fehler auftritt.
    Du sollst ja auch keinen BGW nehmen! Der Webclient hat die entsprechenden Methoden um Files ohne blockierung des aufrufenden Threads zu downloaden - die verwendest du ja auch. Außerdem hat der WebClient die nötigen Events um über den Fortschritt und das Ende des Downloads zu informieren. Muss man halt verwenden. siehe link oben

    Und was sollen deine DirectCast Befehle? Im Prinzip machst du DirectCast(Integer, Integer). Also irgendwie ziemlich unsinnig.