Mutli-Threading mit Numeric Up-Down

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mutli-Threading mit Numeric Up-Down

    Guten Tag,
    ich schreibe grade ein Programm, es funktioniert alles hervorragend, nur möchte ich wissen wie man Multi-Threading einsetzt ich habe gerade alles in einem Timer.
    Das Programm soll checken ob die website funktionert sprich:

    VB.NET-Quellcode

    1. Try
    2. Dim wc as new Net.WebClient
    3. wc.DownloadString("google.com")
    4. Textbox1.AppendText("Valid" + SeitenLink)
    5. Catch ex as Exception
    6. wc.DownloadString("gooafwafgawgfgle.com")
    7. Textbox1.Text("Unvalid" + SeitenLink)
    8. End Try


    Das kann ich natürlich mit einem Thread machen sprich:

    VB.NET-Quellcode

    1. Public Async Sub Check
    2. dim wc as net net.webclient
    3. Await wc.DownloadStringTaskAsync(New Uri("gaepighawgnawg.com"))


    Aber genau das ist mir immernoch zu langsam ich will es mit z.B 40 Threads laufen lassen das es halt ziemlich schnell funktioniert.
    btw. es checkt ob es einen Bit.ly link gibt oder nicht.


    Kann mir da jemand helfen ? :c

    Mfg Kashed
    @Kashed Was haben die Threads mit NumericUpDown zu tun?
    Ein NumericUpDown ist ein GUI-Control, das lässt sich nur im GUI-Thread bedienen.
    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!
    Ich zeig dir mal meinen Code und was ich ungefähr machen will:

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Imports System.Linq
    3. Imports System.Windows.Forms
    4. Imports System.Threading
    5. Imports System.Collections.Generic
    6. Imports System.Runtime.Remoting
    7. Public Class KBC
    8. Dim mouseOffset As Point
    9. Private Sub Me_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel1.MouseDown
    10. mouseOffset = New Point(-e.X, -e.Y)
    11. End Sub
    12. Private Sub Me_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel1.MouseMove
    13. If e.Button = MouseButtons.Left Then
    14. Dim mousePos = Control.MousePosition
    15. mousePos.Offset(mouseOffset.X, mouseOffset.Y)
    16. Location = mousePos
    17. End If
    18. End Sub
    19. Private Sub KBC_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    20. Guna.UI.Lib.GraphicsHelper.ShadowForm(Me)
    21. CheckForIllegalCrossThreadCalls = False
    22. End Sub
    23. Private Sub CloseBTN_Click(sender As Object, e As EventArgs) Handles CloseBTN.Click
    24. End
    25. End Sub
    26. Private Sub MinBTN_Click(sender As Object, e As EventArgs) Handles MinBTN.Click
    27. Me.WindowState = FormWindowState.Minimized
    28. End Sub
    29. Private Sub GenerateBTN_Click(sender As Object, e As EventArgs) Handles GenerateBTN.Click
    30. Generator.Start()
    31. End Sub
    32. Public Function RandomString(ByVal length As Integer) As String
    33. Dim sb As New System.Text.StringBuilder
    34. Dim chars() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
    35. "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
    36. Dim upperBound As Integer = UBound(chars)
    37. For x As Integer = 1 To length
    38. sb.Append(chars(Int(Rnd() * upperBound)))
    39. Next
    40. Return sb.ToString
    41. End Function
    42. Private Sub Generator_Tick(sender As Object, e As EventArgs) Handles Generator.Tick
    43. Dim w As String = "https://bit.ly/" & RandomString(1) & RandomString(1) & RandomString(1) & RandomString(1) & RandomString(1) & RandomString(1) & RandomString(1)
    44. TextBox1.AppendText(w + Environment.NewLine)
    45. Dim lineCount2 As Integer = TextBox1.Lines.Count
    46. lblGenerated.Text = lineCount2.ToString
    47. End Sub
    48. Private Sub StopGenBTN_Click(sender As Object, e As EventArgs) Handles StopGenBTN.Click
    49. Generator.Stop()
    50. End Sub
    51. Dim w() As String
    52. Public Sub Check(stateinfo As Object)
    53. w = TextBox1.Text.Split(Environment.NewLine)
    54. Dim u As New Net.WebClient
    55. TextBox1.Text = TextBox1.Text.Substring(TextBox1.Text.IndexOf(vbCr) + 1)
    56. For Each w As String In links
    57. Try
    58. u.DownloadString(w(1))
    59. TextBox3.AppendText(w(1))
    60. Catch ex As Exception
    61. TextBox2.AppendText(w(1))
    62. End Try
    63. Next
    64. Dim lineCount As Integer = TextBox2.Lines.Count
    65. lblUnvalid.Text = lineCount.ToString
    66. Dim lineCount1 As Integer = TextBox3.Lines.Count
    67. lblValid.Text = lineCount.ToString
    68. Dim lineCount2 As Integer = TextBox1.Lines.Count
    69. lblGenerated.Text = lineCount.ToString
    70. End Sub
    71. Private Sub Checker_Tick(sender As Object, e As EventArgs) Handles Checker.Tick
    72. End Sub
    73. Dim links As New List(Of String)
    74. Private Sub CheckBTN_Click(sender As Object, e As EventArgs) Handles CheckBTN.Click
    75. Checker.Start()
    76. Dim threads As Integer = ThreadCount.Value
    77. For Each w As String In links
    78. ThreadPool.QueueUserWorkItem(AddressOf Check)
    79. Next
    80. End Sub
    81. Private Sub StopCheckBTN_Click(sender As Object, e As EventArgs) Handles StopCheckBTN.Click
    82. End Sub
    83. End Class


    und das soll ungefähr rein:

    VB.NET-Quellcode

    1. For Each string In textbox1.text
    2. ThreadPool.QueueUserWorkItem(AddressOf check, (erste line von textbox1.text checken))
    3. Next

    Kashed schrieb:

    CheckForIllegalCrossThreadCalls = False
    "Hoëcker, Sie sind raus!"
    Z#27: EndOMG, was für Methoden kommen hier zum Einsatz?!?

    MSDN schrieb:

    Because End terminates your application without attending to any resources that might be open, you should try to close down cleanly before using it. For example, if your application has any forms open, you should close them before control reaches the End statement.
    You should use End sparingly, and only when you need to stop immediately. The normal ways to terminate a procedure (Return Statement and Exit Statement) not only close down the procedure cleanly but also give the calling code the opportunity to close down cleanly. A console application, for example, can simply Return from the Main procedure.

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Stichwort VB6-Namespace mit Int(), Rnd(), UBound()
    Wo kommt nun in Deinem Code ein NumericUpDown vor?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Kashed schrieb:

    Ich zeig dir mal meinen Code und was ich ungefähr machen will:
    Vielleicht beschreibst Du zunächst in ein odere zwei Textzeilen und verbal, was Du willst.
    Solch langen Code zu analysieren ohne zu wissen, was er tun soll, ist nicht unbedingt sinnvoll.
    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!
    @Kashed OK. Wo ist das Problem?
    Und:
    Jede Text-Zeile ein Thread ist oberdümmlich, weil das Starten eines Threads Performance frisst.
    Probierma Parallel.ForEach().
    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!