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:
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^^
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
- Public Class main
- Public Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- config.loadconfig()
- End Sub
- .
- .
- .
- Public Shared Sub updatetab_createextractedpatch_startprogress_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updatetab_createextractedpatch_startprogress_button.Click
- If Not Worker.Threads.create_extracted_patchThread.IsAlive Then
- Try
- Worker.Threads.create_extracted_patchThread.Start()
- Catch ex As Exception
- End Try
- End If
- End Sub
- End Class
- ...
- Public Class Worker
- ...
- Public Class Threads
- Public Shared create_extracted_patchThread As New Thread(AddressOf update.create_extracted_patch)
- Public Delegate Sub myDelegate(ByVal MSG As String)
- Public Shared Sub change_statuslabel_text(ByVal text As String)
- If main.main_statuslabel.InvokeRequired Then
- Dim d As New myDelegate(AddressOf change_statuslabel_text)
- main.main_statuslabel.Invoke(d, text)
- Else
- main.main_statuslabel.Text = text
- End If
- End Sub
- Public Shared Sub update_progressbar()
- If main.main_ProgressBar.InvokeRequired Then
- Dim d As New myDelegate(AddressOf update_progressbar)
- main.main_statuslabel.Invoke(d)
- Else
- main.main_ProgressBar.Value += 1
- main.main_statuslabel.Update()
- End If
- End Sub
- Public Shared Sub reset_progressbar(ByVal maximum As Integer)
- If main.main_ProgressBar.InvokeRequired Then
- Dim d As New myDelegate(AddressOf reset_progressbar)
- main.main_statuslabel.Invoke(d)
- Else
- main.main_ProgressBar.Maximum = maximum
- main.main_ProgressBar.Value = 0
- main.main_ProgressBar.Update()
- End If
- End Sub
- End Class
- Public Class update
- Public Shared Sub create_extracted_patch()
- If cache.updatetab.outputfoldername = Nothing Or cache.updatetab.UpdateFolder = Nothing Then
- Exit Sub
- End If
- If Not Directory.Exists(cache.ReleaseFolder & cache.updatetab.outputfoldername) Then
- Try
- Directory.CreateDirectory(cache.ReleaseFolder & cache.updatetab.outputfoldername)
- Catch ex As Exception
- End Try
- End If
- ...
- Threads.change_statuslabel_text("Indexing") 'hier sollte eigentlich der text des labels geändert werden
- Dim emptyfiles As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", True)
- Dim emptydirs As List(Of String) = CorLib.FileSystemHelper.GetDirectories(cache.updatetab.UpdateFolder, True)
- Dim allfiles As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", False)
- Threads.reset_progressbar(allfiles.Count + 1)
- For Each emptyfile In emptyfiles
- Threads.change_statuslabel_text("Deleting: " & emptyfile)
- Try
- File.Delete(emptyfile)
- Catch ex As Exception
- End Try
- Threads.update_progressbar()
- Next
- For Each emptydir In emptydirs
- Threads.change_statuslabel_text("Deleting: " & emptydir)
- Try
- Directory.Delete(emptydir)
- Catch ex As Exception
- End Try
- Threads.update_progressbar()
- Next
- Dim filestocopy As List(Of String) = CorLib.FileSystemHelper.GetFiles(cache.updatetab.UpdateFolder, "all", False)
- For Each filetocopy In filestocopy
- Threads.change_statuslabel_text("Copying: " & filetocopy)
- Try
- File.Copy(filetocopy, cache.ReleaseFolder & cache.updatetab.outputfoldername, True)
- Catch ex As Exception
- End Try
- Threads.update_progressbar()
- Next
- Threads.change_statuslabel_text("Extracted Patch successfully created!")
- End Sub
- End Class
- 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^^