BGW Bringt Form zum einfrieren

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    BGW Bringt Form zum einfrieren

    Hey Leute,

    ich habe da so ein kleinen Probelm und zwar habe ich mehrere BackGroundWorke in meinem Project die jeweils 2 Schleifen(die greiefen mit in die form ein) besitztn aber wenn ich öfter mals starte/stoppe oder auch so wenn der BGW am laufen ist und ich die Form bewege oder im DataGridView Scrolle friert die Form komplett ein. Wie könnte man dies behen ? Ich habs schon in nem thread veruscht aber dann dauert die prozedur ewig und die form ist nicht mehr so flüssig benutztbar.

    Wäre für jede hilfe und denk anstöße dankbar!

    MfG Sven
    Du solltest deinen Ansatz komplett überdenken. Der BackgroundWorker ist nichts anderes als ein vereinfachter Thread, daher darf man (wie auch bei Threads) auf keine Fall außerhalb des GUI-Threads auf die GUI zugreifen!

    Viele Grüße, Phil.
    also dies habe ich im bgw ^^ aber das probelm ist halt das es ins gui eingreift^^

    VB.NET-Quellcode

    1. Dim sek As Integer = 0
    2. serverliste.Items.Clear()
    3. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://alteriw.net/dedicated.php")
    4. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    5. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    6. Dim httpContent As String = reader.ReadToEnd
    7. Dim RegEx_Trefferid As New Regex("<input class=""serverip"" type=""hidden"" value=""(?<Treffer>(.*?))""/><br />")
    8. Dim Treffergruppeid As MatchCollection
    9. Dim Trefferid As Match
    10. Try
    11. Treffergruppeid = RegEx_Trefferid.Matches(httpContent)
    12. For Each Trefferid In Treffergruppeid
    13. Dim idname As String = Trefferid.Groups("Treffer").ToString()
    14. Dim words As String() = idname.Split(":")
    15. serverliste.Items.Add((words(0)) & ":" & words(1))
    16. KryptonPage4.Text = "Serverlist" & "(" & serverliste.Items.Count & ")"
    17. Next
    18. Catch ex As Exception
    19. End Try
    20. dediserver2.Rows.Clear()
    21. ProgressBar2.Value = 0
    22. Dim item As String
    23. For Each item In serverliste.Items
    24. If weiterodernicht = False Then Exit Sub
    25. Dim words As String() = item.Split(":")
    26. Dim GetVar As New classGetVar(words(0), words(1), "servers")
    27. Try
    28. If GetServers() Then
    29. Dim ip As String = item
    30. Dim Name As String = GetCVar("sv_hostname").Replace("^0", "").Replace("^1", "").Replace("^2", "").Replace("^3", "").Replace("^4", "").Replace("^5", "").Replace("^6", "").Replace("^7", "").Replace("^8", "").Replace("^9", "")
    31. Dim players As String = GetCVar("sv_clients") & "/" & GetCVar("sv_maxclients")
    32. Dim GameType As String = GetCVar("g_gametype")
    33. Dim hardcore As String = GetCVar("g_hardcore").Replace("1", "True").Replace("0", "False")
    34. Dim Map As String = GetCVar("mapname").Replace("mp_afghan", "Afghan").Replace("mp_abandon", "Carnival").Replace("mp_trailerpark", "Trailerpark").Replace("mp_boneyard", "Scrapyard").Replace("mp_brecourt", "Wasteland").Replace("mp_checkpoint", "Karachi").Replace("mp_derail", "Derail").Replace("mp_estate", "Estate").Replace("mp_favela", "Favela").Replace("mp_highrise", "Highrise").Replace("mp_nightshift", "Skidrow").Replace("mp_invasion", "Invasion").Replace("mp_quarry", "Quarry").Replace("mp_rundown", "Rundown").Replace("mp_rust", "Rust").Replace("mp_subbase", "Subbase").Replace("mp_terminal", "Terminal").Replace("mp_underpass", "Underpass").Replace("mp_complex", "Bailout").Replace("mp_compact", "Salvage").Replace("mp_crash", "Crash").Replace("mp_overgrown", "Overgrown").Replace("mp_storm", "Storm").Replace("mp_fuel2", "Fuel").Replace("mp_vacant", "Vacant").Replace("mp_strike", "Strike")
    35. ProgressBar2.Maximum = serverliste.Items.Count
    36. ProgressBar2.Value += 1
    37. dediserver2.Rows.Add(ip, Name, players, Map, GameType, hardcore)
    38. End If
    39. KryptonPage4.Text = "Serverlist" & "(" & dediserver2.RowCount & "/" & serverliste.Items.Count & ")"
    40. ButtonSpecAny3.Text = "Querrried" & "(" & dediserver2.RowCount & "/" & serverliste.Items.Count & ")"
    41. Application.DoEvents()
    42. Catch ex As Exception
    43. End Try
    44. Next

    der bgw nutz auch eine klasse mit oder könnte es vielleicht auch an den langen replace aktionen liegen?^^

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

    [OffTopic]

    VB.NET-Quellcode

    1. If weiterodernicht = False Then Exit Sub

    :thumbsup: Genial! Philosophisch! :thumbsup:

    [/OffTopic]

    Und sowas:

    VB.NET-Quellcode

    1. Try
    2. '...
    3. Catch ex As Exception
    4. End Try
    ist Totsünde.

    Sowas macht eine App komplett undebuggable.

    Deshalb gehe ich auch nicht weiter drauf ein, sondern empfehle, von Backgroundworker Abstand zu nehmen - evtl. AsyncWorker - CodeProject nehmen?
    Jdfs. der Artikel erklärt auch einiges zu Threading, und Gui-Updaten und so Zeugs.