Label-Text einer Form durch einen/mehrere Thread/s ändern

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von razor8.

    Label-Text einer Form durch einen/mehrere Thread/s ändern

    hallo leute, ich hab folgendes problem:

    ich hab ein Label, dessen text ich in einem Thread ändern will, aber es passiert einfach garnichts. ich habs mit hilfe dieses Beitrags versuch aber es halt leider auch nicht funktioniert

    ich hab folgende Klassen:

    Main : hier wird das Form geladen
    Worker: hier sind alle klassen drin, mit denen die ganze arbeit verrichtet wird
    Worker\Threads: hier werden die Threads deklariert
    Worker\Update: hier sind alle Methoden dirn die im Teil: "Update" des programms gebraucht werden

    hir ist mal der code zusammengefasst:

    VB.NET-Quellcode

    1. Public Class main
    2. Public Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. config.loadconfig()
    4. End Sub
    5. .
    6. .
    7. .
    8. Public Shared Sub updatetab_createextractedpatch_startprogress_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updatetab_createextractedpatch_startprogress_button.Click
    9. If Not Worker.Threads.create_extracted_patchThread.IsAlive Then
    10. Try
    11. Worker.Threads.create_extracted_patchThread.Start()
    12. Catch ex As Exception
    13. End Try
    14. End If
    15. End Sub
    16. End Class
    17. ...
    18. Public Class Worker
    19. ...
    20. Public Class Threads
    21. Public Shared create_extracted_patchThread As New Thread(AddressOf update.create_extracted_patch)
    22. Public Delegate Sub myDelegate(ByVal MSG As String)
    23. Public Shared Sub change_statuslabel_text(ByVal text As String)
    24. If main.main_statuslabel.InvokeRequired Then
    25. Dim d As New myDelegate(AddressOf change_statuslabel_text)
    26. main.main_statuslabel.Invoke(d, text)
    27. Else
    28. main.main_statuslabel.Text = text
    29. End If
    30. End Sub
    31. Public Shared Sub update_progressbar()
    32. If main.main_ProgressBar.InvokeRequired Then
    33. Dim d As New myDelegate(AddressOf update_progressbar)
    34. main.main_statuslabel.Invoke(d)
    35. Else
    36. main.main_ProgressBar.Value += 1
    37. main.main_statuslabel.Update()
    38. End If
    39. End Sub
    40. Public Shared Sub reset_progressbar(ByVal maximum As Integer)
    41. If main.main_ProgressBar.InvokeRequired Then
    42. Dim d As New myDelegate(AddressOf reset_progressbar)
    43. main.main_statuslabel.Invoke(d)
    44. Else
    45. main.main_ProgressBar.Maximum = maximum
    46. main.main_ProgressBar.Value = 0
    47. main.main_ProgressBar.Update()
    48. End If
    49. End Sub
    50. End Class
    51. Public Class update
    52. Public Shared Sub create_extracted_patch()
    53. If cache.updatetab.outputfoldername = Nothing Or cache.updatetab.UpdateFolder = Nothing Then
    54. Exit Sub
    55. End If
    56. If Not Directory.Exists(cache.ReleaseFolder & cache.updatetab.outputfoldername) Then
    57. Try
    58. Directory.CreateDirectory(cache.ReleaseFolder & cache.updatetab.outputfoldername)
    59. Catch ex As Exception
    60. End Try
    61. End If
    62. ...
    63. Threads.change_statuslabel_text("Indexing") 'hier sollte eigentlich der text des labels geändert werden
    64. Dim emptyfiles As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", True)
    65. Dim emptydirs As List(Of String) = CorLib.FileSystemHelper.GetDirectories(cache.updatetab.UpdateFolder, True)
    66. Dim allfiles As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", False)
    67. Threads.reset_progressbar(allfiles.Count + 1)
    68. For Each emptyfile In emptyfiles
    69. Threads.change_statuslabel_text("Deleting: " & emptyfile)
    70. Try
    71. File.Delete(emptyfile)
    72. Catch ex As Exception
    73. End Try
    74. Threads.update_progressbar()
    75. Next
    76. For Each emptydir In emptydirs
    77. Threads.change_statuslabel_text("Deleting: " & emptydir)
    78. Try
    79. Directory.Delete(emptydir)
    80. Catch ex As Exception
    81. End Try
    82. Threads.update_progressbar()
    83. Next
    84. Dim filestocopy As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", False)
    85. For Each filetocopy In filestocopy
    86. Threads.change_statuslabel_text("Copying: " & filetocopy)
    87. Try
    88. File.Copy(filetocopy, cache.ReleaseFolder & cache.updatetab.outputfoldername, True)
    89. Catch ex As Exception
    90. End Try
    91. Threads.update_progressbar()
    92. Next
    93. Threads.change_statuslabel_text("Extracted Patch successfully created!")
    94. End Sub
    95. End Class
    96. End Class


    habt ihr vlt ne ahnung wieso das mit dem delegate-invoke nicht funktioniert?

    danke für eure hilfe

    ps: ihr könnt den code gerne so verändern, das er funktioniert^^