Threading

  • Allgemein

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Rylisma.

    Hallo,
    ich habe zwar viele Themen im Forum gefunden.
    Bei mir hat aber nichts geholfen.

    Der Fehler beginnt schon bei :

    VB.NET-Quellcode

    1. Dim Thread2 As New System.Threading.Thread(AddressOf Start2)


    Mein Code

    VB.NET-Quellcode

    1. Dim Thread2 As New System.Threading.Thread(AddressOf Start2)
    2. Im Form1_Load :
    3. Thread2.Start
    4. Sub Start2()
    5. For i = 0 To 20
    6. Thread2.Sleep(200)
    7. MsgBox("Test")
    8. Next
    9. End Sub
    Dies läuft:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Thread2 As New System.Threading.Thread(AddressOf Start2)
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. Thread2.Start()
    5. End Sub
    6. Private Sub Start2()
    7. Dim summe As Long = 0
    8. For i As Integer = 0 To 20
    9. summe += 1
    10. Next
    11. MessageBox.Show("Test")
    12. End Sub
    13. End Class
    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!

    RodFromGermany schrieb:

    Dies läuft:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Thread2 As New System.Threading.Thread(AddressOf Start2)
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. Thread2.Start()
    5. End Sub
    6. Private Sub Start2()
    7. Dim summe As Long = 0
    8. For i As Integer = 0 To 20
    9. summe += 1
    10. Next
    11. MessageBox.Show("Test")
    12. End Sub
    13. End Class

    Nein eben nicht...
    Dim Thread2 As New System.Threading.Thread(AddressOf Start2)
    Kann man nicht benutzen
    Du zeigst uns auch nicht den richtigen Code.
    Aus der Fehlermeldung kann man lesen, dass die Start2-Methode zwei Parameter (Object und EventArgs) annimmt.
    Dem Thread-Konstruktor kannst du jedoch nur (?) eine parameterlose Methode übergeben.

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

    Das ist auf jedenfall ein Fehler:

    Rylisma schrieb:


    VB.NET-Quellcode

    1. Thread2.Sleep(200)



    Das musst du in

    VB.NET-Quellcode

    1. Thread.Sleep(200)
    ändern.

    Aktiviere bitte

    VB.NET-Quellcode

    1. Option Strict On
    Das hätte den Fehler verhindert ;)

    Edit:

    Mmh... merke gerade, dass der Fehler bei mir überhaupt nicht auftritt, auch wenn ich genau deinen Code benutze.
    Poste mal bitte deinen kompletten Code, so wie er bei dir steht.

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

    Statische Methoden funktionieren auch von Instanzen aus, nur macht man das nicht. Mein Beitrag ist übrigens das, was dir haiyyu erklärt hat, nur noch etwas ausgeweitet. Threads können enweder parameterlose Methoden oder welche mit einem einzigen Parameter vom Typ Object annehmen. Deine tolle Start2-Methode hat 2 Parameter.

    Gruß
    ~blaze~
    DarkAngel, Thread2.Sleep(200) ist nicht falsch. Die Thread-Klasse hat eine Methode Sleep, von dem her stimmt der Codeteil.
    Wäre er nicht richtig, gäbe es noch eine Fehlermeldung, die ganz anders aussähe. Auch hätte Option Strict On das nicht verhindert.
    Noch eine Frage ;)

    Ich hab das jetzt so :

    VB.NET-Quellcode

    1. Dim thread As System.Threading.Thread


    Form1_Load :

    VB.NET-Quellcode

    1. thread = New System.Threading.Thread(AddressOf Start2)
    2. thread.Start()



    Sub Start2 :

    VB.NET-Quellcode

    1. Private Sub Start2()
    2. For i = 0 To Anzahl.Value - 1
    3. 'thread.Sleep(2000) --------------> Wieso funktioniert das nicht? //
    4. MsgBox("Test :3")
    5. Next
    6. End Sub


    Fehlermeldung :

    Warnung 1 Zugriff des freigegebenen Members, konstanten Members,
    Enumerationsmembers oder geschachtelten Typs über eine Instanz;
    der
    qualifizierende Ausdruck wird nicht ausgewertet.
    Danke!
    Daran habe ich garnicht gedacht ._.

    Mal ne andere Frage nicht dazu :

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. WebBrowser1.Navigate("www.google.de")
    3. End Sub
    4. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    5. WebBrowser1.Document.GetElementById("gbqfq").SetAttribute("value", TextBox1.Text)
    6. Timer1.Enabled = False
    7. End Sub


    Dieser Code hat bei mir eig. immer funktioniert plötzlich auf einmal nicht mehr.
    Es kommt ein Hinweiß, dass man prüfen soll ob der Wert nicht NULL ist das habe ich gemacht.
    Hat aber nichts gebracht deswegen frage ich micht was falsch ist.