Programm hängt sich auf beim Download größerer Files!

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Ashton.

    Programm hängt sich auf beim Download größerer Files!

    Hallo,

    ich suche schon seit mehreren Stunden nach einer Lösung.
    Ich habe ein Programm geskriptet welches Überprüft welche Dateien er herunterladen soll. Dies erfolg alles übers Internet.

    Es funktionniert genau so wie es sollte, jedoch wenn die Files größer werden hängt sich das Programm auf.
    zB bei einem File von der größe 450 kb ist gar kein Problem zum downloaden und das Programm läuft weiter.

    Gibt es eine möglichkeit, den ablauf vom Skript zu stoppen bis der Download fertig ist ?

    MfG Ashton
    Ok gut, ich hab das in etwa hinbekommen mit dem Backgorundworker.
    Aber jetzt habe ich das Problem, dass er das was im BackgroundWorker drin steht immer wieder wiederholt, ohne Ende.

    Was kann ich da machen?

    Ich bin noch ziemlich neu in VB :)

    MfG Ashton

    Ashton schrieb:

    D.h mit dem Backgroundworker kann ich da Skript sozusagen anhalten, bis der Download fertig ist ?

    Dieses Denken erinnert mich an "Spagetti-Code".
    Windows-Programme sind ereignisorientiert. Ein Ereignis, Button_Click, Mouse_Down, Timer_Tick oder Thread_Start usw. startet einen Ablauf und hört auf, wenn der entsprechende Inhalt abgearbeitet ist. Diese Abläufe sind in Threads organisiert, die vom Betriebssystem zur Abarbeitung Zeitscheiben zugewiesen bekommen. Ein einfaches Programm hat nur einen Thread, den GUI-Thread. Wenn viel zu tun ist, kann es sein, dass die Oberfläche "einfriert", also nicht mehr aktualisiert wird. Deswegen werden gewisse Abläufe in separate Threads ausgelagert. Das hat den Vorteil, dass die GUI wieder frei ist und das Programm schneller läuft, weil 2 Zeitscheiben mehr Zeit ist als 1 Zeitscheibe (vom Gesamt-Zeitscheibenkuchen).
    Der Nachteil besteht darin, dass Zugriffe auf Variablen synchronisiert und GUI-Zugriffe invoked werden müssen.
    Ansonsten ist das alles nur eine Frage der Gewöhnung. :thumbup:
    ----------------------------------
    Zeige Deinen Code und Dir wird geholfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Zeige Deinen Code und Dir wird geholfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, hab das nicht gesehen

    Naja hier ist der Code, es ist ein Patcher, auch wenn etwas umständlich geschrieben.
    Nochmal das Problem, nachdem er anfängt zu kontrollieren, ob er etwas Patchen muss, dann bleibt er beim Abschnitt zB Monster DATEIEN stehen
    und geht so wie ich das in der Praxis bemerkt habe sofort zum Ende und öffnet halt die MessageBox und fängt dann wieder von vorne an, und öffnet
    immer und immer wieder die MessageBox .

    Hier der Code:
    Zum testen ob er funktionniert, habe ich so eingestellt, dass er die Monster DATEIEN soll patchen, aber wenn er die geladen hat, überprüft er nicht mehr
    den Rest oder doch ? und wieso wiederholt er immer wieder alles ?

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim WC As New WebClient
    2. '---------------------------------------------------------------------------------------------------'--------------------------------ROOT DATEIEN-----------------------------------------------------'---------------------------------------------------------------------------------------------------
    3. barlabel.Text = "Überprüfe root.het/loo..."My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/root.txt","root.txt")Dim root As Integerroot = My.Computer.FileSystem.ReadAllText("root.txt")If root= My.Settings.root Thenbarlabel.Text = "Überprüfe root.het/loo...Ok"gesamt.Value = "10"My.Computer.FileSystem.DeleteFile("root.txt")Else
    4. barlabel.Text = "Lösche root.het..."
    5. My.Computer.FileSystem.DeleteFile("pack/root.het")
    6. barlabel.Text = "Lösche root.loo..."
    7. My.Computer.FileSystem.DeleteFile("pack/root.loo")
    8. barlabel.Text = "Lade root.het herunter..."
    9. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/root.het"),"pack/root.het")
    10. barlabel.Text = "Lade root.loo herunter..."
    11. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/root.loo"),"pack/root.loo")
    12. barlabel.Text = "root.het/loo wurden aktualisiert!"
    13. My.Computer.FileSystem.DeleteFile("root.txt")
    14. My.Settings.root= root
    15. End If
    16. '---------------------------------------------------------------------------------------------------
    17. '--------------------------------Effect DATEIEN-----------------------------------------------------
    18. '---------------------------------------------------------------------------------------------------
    19. barlabel.Text = "Überprüfe effect.het/loo..."
    20. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/Effect.txt","Effect.txt")
    21. Dim effect As Integer
    22. effect = My.Computer.FileSystem.ReadAllText("Effect.txt")
    23. Ifeffect = My.Settings.Effect Then
    24. barlabel.Text = "Überprüfe effect.het/loo...Ok"
    25. gesamt.Value = "20"
    26. My.Computer.FileSystem.DeleteFile("Effect.txt")
    27. Else
    28. barlabel.Text = "Lösche Effect.het..."
    29. My.Computer.FileSystem.DeleteFile("pack/Effect.het")
    30. barlabel.Text = "Lösche Effect.loo..."
    31. My.Computer.FileSystem.DeleteFile("pack/Effect.loo")
    32. barlabel.Text = "Lade Effect.het herunter..."
    33. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Effect.het"),"pack/Effect.het")
    34. barlabel.Text = "Lade Effect.loo herunter..."
    35. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Effect.loo"),"pack/Effect.loo")
    36. barlabel.Text = "Effect.het/loo wurden aktualisiert!"
    37. My.Computer.FileSystem.DeleteFile("Effect.txt")
    38. My.Settings.Effect = effect
    39. End If
    40. '---------------------------------------------------------------------------------------------------
    41. '--------------------------------icon DATEIEN-------------------------------------------------------
    42. '---------------------------------------------------------------------------------------------------
    43. barlabel.Text = "Überprüfe icon.het/loo..."
    44. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/icon.txt","icon.txt")
    45. Dimicon As Integer
    46. icon = My.Computer.FileSystem.ReadAllText("icon.txt")
    47. If icon= My.Settings.icon Then
    48. barlabel.Text = "Überprüfe icon.het/loo...Ok"
    49. gesamt.Value = "32"
    50. My.Computer.FileSystem.DeleteFile("icon.txt")
    51. Else
    52. barlabel.Text = "Lösche icon.het..."
    53. My.Computer.FileSystem.DeleteFile("pack/icon.het")
    54. barlabel.Text = "Lösche icon.loo..."
    55. My.Computer.FileSystem.DeleteFile("pack/icon.loo")
    56. barlabel.Text = "Lade icon.het herunter..."
    57. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/icon.het"),"pack/icon.het")
    58. barlabel.Text = "Lade icon.loo herunter..."
    59. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/icon.loo"),"pack/icon.loo")
    60. barlabel.Text = "icon.het/loo wurden aktualisiert!"
    61. My.Computer.FileSystem.DeleteFile("icon.txt")
    62. My.Settings.icon= icon
    63. End If
    64. '---------------------------------------------------------------------------------------------------
    65. '--------------------------------item DATEIEN-------------------------------------------------------
    66. '---------------------------------------------------------------------------------------------------
    67. barlabel.Text = "Überprüfe item.het/loo..."
    68. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/item.txt","item.txt")
    69. Dimitem As Integer
    70. item = My.Computer.FileSystem.ReadAllText("item.txt")
    71. If item= My.Settings.item Then
    72. barlabel.Text = "Überprüfe item.het/loo...Ok"
    73. gesamt.Value = "38"
    74. My.Computer.FileSystem.DeleteFile("item.txt")
    75. Else
    76. barlabel.Text = "Lösche item.het..."
    77. My.Computer.FileSystem.DeleteFile("pack/item.het")
    78. barlabel.Text = "Lösche item.loo..."
    79. My.Computer.FileSystem.DeleteFile("pack/item.loo")
    80. barlabel.Text = "Lade item.het herunter..."
    81. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/item.het"),"pack/item.het")
    82. barlabel.Text = "Lade item.loo herunter..."
    83. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/item.loo"),"pack/item.loo")
    84. barlabel.Text = "item.het/loo wurden aktualisiert!"
    85. My.Computer.FileSystem.DeleteFile("item.txt")
    86. My.Settings.item= item
    87. End If
    88. '---------------------------------------------------------------------------------------------------
    89. '--------------------------------locale_de DATEIEN--------------------------------------------------
    90. '---------------------------------------------------------------------------------------------------
    91. barlabel.Text = "Überprüfe locale_de.het/loo..."
    92. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/locale_de.txt","locale_de.txt")
    93. Dimlocale_de As Integer
    94. locale_de = My.Computer.FileSystem.ReadAllText("locale_de.txt")
    95. Iflocale_de = My.Settings.locale_de Then
    96. barlabel.Text = "Überprüfelocale_de.het/loo...Ok"
    97. gesamt.Value = "44"
    98. My.Computer.FileSystem.DeleteFile("locale_de.txt")
    99. Else
    100. barlabel.Text = "Lösche locale_de.het..."
    101. My.Computer.FileSystem.DeleteFile("pack/locale_de.het")
    102. barlabel.Text = "Lösche locale_de.loo..."
    103. My.Computer.FileSystem.DeleteFile("pack/locale_de.loo")
    104. barlabel.Text = "Lade locale_de.het herunter..."
    105. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/locale_de.het"),"pack/locale_de.het")
    106. barlabel.Text = "Lade locale_de.loo herunter..."
    107. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/locale_de.loo"),"pack/locale_de.loo")
    108. barlabel.Text = "locale_de.het/loo wurden aktualisiert!"
    109. My.Computer.FileSystem.DeleteFile("locale_de.txt")
    110. My.Settings.locale_de= locale_de
    111. End If
    112. '---------------------------------------------------------------------------------------------------
    113. '--------------------------------ETC DATEIEN--------------------------------------------------------
    114. '---------------------------------------------------------------------------------------------------
    115. barlabel.Text = "Überprüfe ETC.het/loo..."
    116. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/ETC.txt", "ETC.txt")
    117. Dim ETCAs Integer
    118. ETC = My.Computer.FileSystem.ReadAllText("ETC.txt")
    119. If ETC= My.Settings.ETC Then
    120. barlabel.Text = "Überprüfe ETC.het/loo...Ok"
    121. gesamt.Value = "50"
    122. My.Computer.FileSystem.DeleteFile("ETC.txt")
    123. Else
    124. barlabel.Text = "Lösche ETC.het..."
    125. My.Computer.FileSystem.DeleteFile("pack/ETC.het")
    126. barlabel.Text = "Lösche ETC.loo..."
    127. My.Computer.FileSystem.DeleteFile("pack/ETC.loo")
    128. barlabel.Text = "Lade ETC.het herunter..."
    129. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/ETC.het"),"pack/ETC.het")
    130. barlabel.Text = "Lade ETC.loo herunter..."
    131. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/ETC.loo"),"pack/ETC.loo")
    132. barlabel.Text = "ETC.het/loo wurden aktualisiert!"
    133. My.Computer.FileSystem.DeleteFile("ETC.txt")
    134. My.Settings.ETC= ETC
    135. End If
    136. '---------------------------------------------------------------------------------------------------
    137. '--------------------------------Monster DATEIEN----------------------------------------------------
    138. '---------------------------------------------------------------------------------------------------
    139. barlabel.Text = "Überprüfe Monster.het/loo..."
    140. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/Monster.txt","Monster.txt")
    141. DimMonster As Integer
    142. Monster = My.Computer.FileSystem.ReadAllText("Monster.txt")
    143. IfMonster = My.Settings.Monster Then
    144. barlabel.Text = "Überprüfe Monster.het/loo...Ok"
    145. gesamt.Value = "55"
    146. My.Computer.FileSystem.DeleteFile("Monster.txt")
    147. Else
    148. barlabel.Text = "Lösche Monster.het..."
    149. My.Computer.FileSystem.DeleteFile("pack/Monster.het")
    150. barlabel.Text = "Lade Monster.het herunter..."
    151. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Monster.het"),"pack/Monster.het")
    152. barlabel.Text = "Lösche Monster.loo..."
    153. My.Computer.FileSystem.DeleteFile("pack/Monster.loo")
    154. barlabel.Text = "Lade Monster.loo herunter..."
    155. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Monster.loo"),"pack/Monster.loo")
    156. barlabel.Text = "Monster.het/loo wurden aktualisiert!"
    157. My.Computer.FileSystem.DeleteFile("Monster.txt")
    158. My.Settings.Monster= Monster
    159. End If
    160. '---------------------------------------------------------------------------------------------------
    161. '--------------------------------monster2 DATEIEN---------------------------------------------------
    162. '---------------------------------------------------------------------------------------------------
    163. barlabel.Text = "Überprüfe monster2.het/loo..."
    164. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/monster2.txt","monster2.txt")
    165. Dimmonster2 As Integer
    166. monster2 = My.Computer.FileSystem.ReadAllText("monster2.txt")
    167. Ifmonster2 = My.Settings.monster2 Then
    168. barlabel.Text = "Überprüfe monster2.het/loo...Ok"
    169. gesamt.Value = "60"
    170. My.Computer.FileSystem.DeleteFile("monster2.txt")
    171. Else
    172. barlabel.Text = "Lösche monster2.het..."
    173. My.Computer.FileSystem.DeleteFile("pack/monster2.het")
    174. barlabel.Text = "Lösche monster2.loo..."
    175. My.Computer.FileSystem.DeleteFile("pack/monster2.loo")
    176. barlabel.Text = "Lade monster2.het herunter..."
    177. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/monster2.het"),"pack/monster2.het")
    178. barlabel.Text = "Lade monster2.loo herunter..."
    179. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/monster2.loo"),"pack/monster2.loo")
    180. barlabel.Text = "monster2.het/loo wurden aktualisiert!"
    181. My.Computer.FileSystem.DeleteFile("monster2.txt")
    182. My.Settings.monster2= monster2
    183. End If
    184. '---------------------------------------------------------------------------------------------------
    185. '--------------------------------NPC DATEIEN--------------------------------------------------------
    186. '---------------------------------------------------------------------------------------------------
    187. barlabel.Text = "Überprüfe NPC.het/loo..."
    188. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/NPC.txt", "NPC.txt")
    189. Dim NPCAs Integer
    190. NPC = My.Computer.FileSystem.ReadAllText("NPC.txt")
    191. If NPC= My.Settings.NPC Then
    192. barlabel.Text = "Überprüfe NPC.het/loo...Ok"
    193. gesamt.Value = "65"
    194. My.Computer.FileSystem.DeleteFile("NPC.txt")
    195. Else
    196. barlabel.Text = "Lösche NPC.het..."
    197. My.Computer.FileSystem.DeleteFile("pack/NPC.het")
    198. barlabel.Text = "Lösche NPC.loo..."
    199. My.Computer.FileSystem.DeleteFile("pack/NPC.loo")
    200. barlabel.Text = "Lade NPC.het herunter..."
    201. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/NPC.het"),"pack/NPC.het")
    202. barlabel.Text = "Lade NPC.loo herunter..."
    203. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/NPC.loo"),"pack/NPC.loo")
    204. barlabel.Text = "NPC.het/loo wurden aktualisiert!"
    205. My.Computer.FileSystem.DeleteFile("NPC.txt")
    206. My.Settings.NPC= NPC
    207. End If
    208. End Sub
    209. Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    210. MessageBox.Show("Fertig!")
    211. End Sub


    Sorry wenn das so lang wurde... Wollte nicht so reinkommen wie es im VB war.... Und If ist mit dem darauffolgendem Wort verbunden, ka wieso -.-

    INFO:
    Der BackgroundWorker wird durch einen Timer aktiviert.

    Wenn noch etwas fehlt, was wichtig sein könnte bitte sagen.

    MfG Ashton
    Du arbeitest parallel mit 2 Download-Verfahren:

    VB.NET-Quellcode

    1. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/Monster.txt","Monster.txt")
    2. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Monster.het"),"pack/Monster.het")

    Stelle zunächst alles auf downloaderX.DownloadFileAsync() um.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Du arbeitest parallel mit 2 Download-Verfahren:

    VB.NET-Quellcode

    1. My.Computer.Network.DownloadFile("http://www.het-loo.org/patch/Monster.txt","Monster.txt")
    2. downloader.DownloadFileAsync(New Uri("http://www.het-loo.org/patch/pack/Monster.het"),"pack/Monster.het")

    Stelle zunächst alles auf downloaderX.DownloadFileAsync() um.
    downloaderX? Wieso X ?
    Da kannst Du mehrere Downloads parallel machen.
    Gib den Downloadern entsprechende Namen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also ich hab dann für jeden Abchnitt einen downloader erstellt.
    Alles ist gut, jedoch wiederholt er noch das ganze immer wieder -.-

    Edit:
    Anderes Problem:
    Er Kontrolliert nur die erste DATEI und geht dann sofort auf das Ende... Wenn ich jetzt so einstelle, dass er die Monster DATEIEN patchen soll, dann kommt er nicht einmal bis dahin, seitdem ich für jeden Abschnitt einen eigenen WebClient gemacht habe :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Ashton“ ()

    Du musst die Schleife identifizieren und auflösen.
    Dann setze mal beim Start der Wiederholung einen Haltepunkt rein und sieh nach, wo er herkommt.
    DownloadFileAsync() .
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Ashton schrieb:

    Edit:
    Anderes Problem:
    Er Kontrolliert nur die erste DATEI und geht dann sofort auf das Ende... Wenn ich jetzt so einstelle, dass er die Monster DATEIEN patchen soll, dann kommt er nicht einmal bis dahin, seitdem ich für jeden Abschnitt einen eigenen WebClient gemacht habe :(
    Hab noch anderes Problem: Zitat^
    Da musst und kannst Du jetzt echt viel lernen.
    Ich habe nämlich keine Zeit, Deinen "Monstercode" in der Tiefe zu analysieren oder gar auszuprobieren.
    Also:
    Zerpflücke Dein Programm in Teilprogramme (mach Dir ggf ein neues kleines Projekt) und teste, ob es läuft.
    Wenn jeder Teil einzeln läuft, setze die Teile einzeln wieder zusammen.
    Teste jedesmal und sorge, dass jede Etappe läuft.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!