Brauche hilfe mit meinem Patcher

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von lahmy.

    Brauche hilfe mit meinem Patcher

    Und zwar binn ich dabei einen Patcher zu machen der MD5 checksummen aus einer datei die er von einem FTP server läd abfragen soll aber ich bekomme immer diesen fehler

    FEHLER: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement TextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.SOURCE:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Security.Cryptography
    3. Public Class Form1
    4. Dim PATCHURL As String = "http://darksky2.co.de/patch/client"
    5. Dim PATCHLIST As String = "http://darksky2.co.de/patch/patchlist.xml"
    6. Dim AppPath As String = My.Computer.FileSystem.CurrentDirectory
    7. Dim WithEvents PatchDownloader As New System.Net.WebClient
    8. Dim WithEvents PatchListDownloader As New System.Net.WebClient
    9. Dim DLURLS As New List(Of String)
    10. Dim ANZAHLDLS As Integer = 0
    11. Dim busy As Boolean = Nothing
    12. Public Function MD5FileHash(ByVal sFile As String) As String
    13. Dim MD5 As New MD5CryptoServiceProvider
    14. Dim Hash As Byte()
    15. Dim Result As String = ""
    16. Dim Tmp As String = ""
    17. Dim FN As New FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
    18. MD5.ComputeHash(FN)
    19. FN.Close()
    20. Hash = MD5.Hash
    21. For i As Integer = 0 To Hash.Length - 1
    22. Tmp = Hex(Hash(i))
    23. If Len(Tmp) = 1 Then Tmp = "0" & Tmp
    24. Result += Tmp
    25. Next
    26. Return Result
    27. End Function
    28. Private Sub Form1_shown(ByVal sender As Object, ByVal e As System.EventArgs)
    29. TextBox1.Text = "Starte Patchvorgang.."
    30. BG_List.RunWorkerAsync()
    31. End Sub
    32. Private Sub BG_List_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG_List.DoWork
    33. PatchListDownloader.DownloadFileAsync(New Uri(PATCHLIST), AppPath & "\patchlist.xml")
    34. End Sub
    35. Private Sub PatchListDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchListDownloader.DownloadFileCompleted
    36. TextBox1.Text = "Patchlist herruntergeladen. Starte nun das Patchen."
    37. ProgressBar2.Value = 0
    38. ProgressBar1.Value = 0
    39. BG_Pacher.RunWorkerAsync()
    40. End Sub
    41. Private Sub BG_Pacher_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG_Pacher.DoWork
    42. If BG_Pacher.CancellationPending = True Then
    43. BG_Pacher.CancelAsync()
    44. End If
    45. Try
    46. Dim xDocument As New Xml.XmlDocument
    47. xDocument.Load(AppPath & "/patchlist.xml")
    48. TextBox1.Text = "Starte nun das Patchen"
    49. For Each node As Xml.XmlNode In xDocument.SelectNodes("Dateien/Datei")
    50. Dim DateiPfad As String = AppPath & "\" & node.Attributes("Dateiname").InnerText
    51. Dim CheckSum As String = node.Attributes("Checksum").InnerText
    52. Dim check As Boolean = Nothing
    53. TextBox1.Text = "Prüfe : " & node.Attributes("Dateiname").InnerText
    54. If File.Exists(DateiPfad) = False Then
    55. DLURLS.Add(PATCHURL & node.Attributes("Dateiname").InnerText.Replace("\", "/"))
    56. Else
    57. If CheckSum = MD5FileHash(DateiPfad) Then
    58. check = True
    59. Else
    60. DLURLS.Add(PATCHURL & node.Attributes("Dateiname").InnerText.Replace("\", "/"))
    61. check = False
    62. End If
    63. End If
    64. Next
    65. ANZAHLDLS = DLURLS.Count
    66. ProgressBar1.Maximum = ANZAHLDLS
    67. ProgressBar1.Value = 0
    68. Catch ex As Exception
    69. End Try
    70. Do
    71. Try
    72. If PatchDownloader.IsBusy = True Then
    73. busy = True
    74. Else
    75. For Each DownloadDatei In DLURLS
    76. If IsNothing(DownloadDatei) Then Exit Do
    77. Do
    78. If busy = False Then
    79. TextBox1.Text = "Patche : " & IO.Path.GetFileName(DownloadDatei)
    80. Dim SpeicherOrt As String = My.Computer.FileSystem.CurrentDirectory & "\" & DownloadDatei.Replace(PATCHURL, "").Replace("/", "\")
    81. Dim uri As New Uri(DownloadDatei)
    82. If File.Exists(SpeicherOrt) = True Then
    83. File.Delete(SpeicherOrt)
    84. End If
    85. PatchDownloader.DownloadFileAsync(uri, SpeicherOrt)
    86. busy = True
    87. Exit Do
    88. End If
    89. Loop
    90. Next
    91. File.Delete(AppPath & "\patchlist.xml")
    92. Exit Do
    93. End If
    94. Catch ex As Exception
    95. End Try
    96. Loop
    97. End Sub
    98. Private Sub PatchDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchDownloader.DownloadFileCompleted
    99. busy = False
    100. If ProgressBar1.Value = ANZAHLDLS Then
    101. Else
    102. ProgressBar1.Value += 1
    103. End If
    104. End Sub
    105. Private Sub PatchDownloader_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles PatchDownloader.DownloadProgressChanged
    106. ProgressBar2.Maximum = e.TotalBytesToReceive
    107. ProgressBar2.Value = e.BytesReceived
    108. End Sub
    109. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    110. My.Settings.Hintergrundbild = ("bg.jpg")
    111. Me.BackgroundImage = Image.FromFile(My.Settings.Hintergrundbild)
    112. End Sub
    113. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    114. Me.Close()
    115. End Sub
    116. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    117. TextBox1.Text = "Starte Patchvorgang.."
    118. BG_List.RunWorkerAsync()
    119. End Sub
    120. End Class


    Ich währe überglücklich wenn mir einer helfen könnte

    aufgrund des Codeumfangs Spoiler hinzugefügt
    CodeTags gesetzt
    ~VaporiZed

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

    lahmy schrieb:

    Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement TextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
    Die Zauberworte heißt Invoke und Delegate.
    Die Langfassung sieht so aus, Properties musst Du entsprechend verwenden:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Delegate Sub FehlerAnzeigenCallback(ByVal message As String)
    2. Private Sub FehlerAnzeigen(ByVal message As String)
    3. If (TextBox1 Is Nothing) Then
    4. Return
    5. End If
    6. If (TextBox1.InvokeRequired) Then
    7. ' Aufruf aus anderem Thread
    8. Dim d As New FehlerAnzeigenCallback(AddressOf FehlerAnzeigen)
    9. TextBox1.Invoke(d, message)
    10. Return
    11. End If
    12. TextBox1.Text = message
    13. End Sub
    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!
    kannst du mir nicht eifach den bearbeiteten fertigen source schicken ? =
    der fehler ist da :
    Private Sub PatchListDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchListDownloader.DownloadFileCompleted
    TextBox1.Text = "Patchlist herruntergeladen. Starte nun das Patchen."
    ProgressBar2.Value = 0
    ProgressBar1.Value = 0
    BG_Pacher.RunWorkerAsync()

    End Sub

    lahmy schrieb:

    kannst du mir nicht eifach den bearbeiteten fertigen source schicken ?


    Willst du ein Programm machen oder nicht?



    600. Beitrag, 1337 junge!
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    lahmy schrieb:

    kannst du mir nicht eifach den bearbeiteten fertigen source schicken ? =
    der fehler ist da :
    Private Sub PatchListDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchListDownloader.DownloadFileCompleted
    TextBox1.Text = "Patchlist herruntergeladen. Starte nun das Patchen."
    ProgressBar2.Value = 0
    ProgressBar1.Value = 0
    BG_Pacher.RunWorkerAsync()

    End Sub


    Da isser sicher nicht. Ausserdem frug ich nach der Zeile, und du antwortest mit 5 Zeilen.
    Aber da isser nicht, denn dort kommt Textbox1 ja gar nicht vor.

    AvoidTryCatch

    Entferne mal alle TryCatchens aussm Code, damit dir die Fehlerzeile ühaupt angezeigt wird.

    Ausser Ausserdem empfahl ich VB-Tag richtig benutzen
    Uneingerückter Code ist eine Zumutung zu lesen.

    lahmy schrieb:

    kannst du mir nicht eifach den bearbeiteten fertigen source schicken ? =
    Versteh den Fehler, wende meinen Code richtig an (mit entsprechenden Anpassungen) und Dein Problem ist gelöst.
    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!