Ich lese Bytes aus meinem Speicher aus und vergleiche diese mit der als Parameter angebenden Zahl.
Das Problem ist, dass ich durch die Schleife einen Deadlock bekomme und IsBusy weiterhin auf True steht, obwohl der BackgroundWorker bereits seine Arbeit vollendet hat.
Wenn ich System.Windows.Forms.Application.DoEvents() einfüge, wird der Vorgang ausgeführt, allerdings sind manchmal bis zu +30.000 Einträge einfach nur Null, was aber nicht sein kann, da Address niemals Null ist.
Wenn ich es ohne die BackgroundWorker mache, dauert der Vorgang meist mehr als eine Minute, was aber viel zu lange ist.
Könnt Ihr mir weiterhelfen?
Das Problem ist, dass ich durch die Schleife einen Deadlock bekomme und IsBusy weiterhin auf True steht, obwohl der BackgroundWorker bereits seine Arbeit vollendet hat.
Wenn ich System.Windows.Forms.Application.DoEvents() einfüge, wird der Vorgang ausgeführt, allerdings sind manchmal bis zu +30.000 Einträge einfach nur Null, was aber nicht sein kann, da Address niemals Null ist.
VB.NET-Quellcode
- Private BackgroundWorker1_Bytes() As Byte
- Private BackgroundWorker2_Bytes() As Byte
- Private BackgroundWorker1_Address As Integer
- Private BackgroundWorker2_Address As Integer
- Private NumberToFind As Integer
- Private Addresses As New List(Of Integer)
- Public Function TEST(ByVal MyNumber As Byte) As Integer()
- NumberToFind = MyNumber
- For Address As Integer = &H4096 To &H64000 Step &H0
- System.Windows.Forms.Application.DoEvents() 'Löst das Deadlock-Problem, sorgt aber für jede Menge unerklärliche Null-Adressen in meinem Array (nicht in diesem Beispiel)
- If BackgroundWorker1.IsBusy = False OrElse BackgroundWorker2.IsBusy = False Then
- If BackgroundWorker1.IsBusy = False Then
- BackgroundWorker1_Address = Address
- BackgroundWorker1_Bytes = {5, 2, 3, 1, 1, 7, 9, 4, 8, 1, 3}
- BackgroundWorker1.RunWorkerAsync()
- ElseIf BackgroundWorker2.IsBusy = False Then
- BackgroundWorker2_Address = Address
- BackgroundWorker2_Bytes = {7, 1, 3, 9, 1, 8, 3, 2, 8, 2, 4}
- BackgroundWorker2.RunWorkerAsync()
- End If
- Address = Address + &H4096
- End If
- Next
- Addresses.Sort()
- Return Addresses.ToArray
- End Function
- Private WithEvents BackgroundWorker1 As New System.ComponentModel.BackgroundWorker
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- For Index As Integer = 0 To BackgroundWorker1_Bytes.Length - 1
- If BackgroundWorker1_Bytes(Index) = NumberToFind Then
- Addresses.Add(BackgroundWorker1_Address + Index)
- End If
- Next
- End Sub
- Private WithEvents BackgroundWorker2 As New System.ComponentModel.BackgroundWorker
- Private Sub BackgroundWorker2_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
- For Index As Integer = 0 To BackgroundWorker2_Bytes.Length - 1
- If BackgroundWorker2_Bytes(Index) = NumberToFind Then
- Addresses.Add(BackgroundWorker2_Address + Index)
- End If
- Next
- End Sub
Wenn ich es ohne die BackgroundWorker mache, dauert der Vorgang meist mehr als eine Minute, was aber viel zu lange ist.
Könnt Ihr mir weiterhelfen?
"Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()