Form steckt - Threads???

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Lawliet.

    Form steckt - Threads???

    Hey Forum,

    ich habe mal wieder ein kleines Problem.
    Ich habe ein Programm geschrieben, dass sehr viele Berechnungen macht(auch mit großen Zahlen), genauer gesagt einige (hundert)tausend an der Zahl.
    Dabei ist die Form natürlich stecken gelieben, also hab ich das ganze in einen Backgroundworker verlegt, der die Zahlen in einer List(of Int) speichert.
    Sobal er mit rechnen fertig ist, will ich die ganzen Zahlen nacheinander in einer Richtextbox in einer 2ten Form aufzählen lassen.
    Da dabei auch die 1rste Form steckt, man sie währenddessen nicht verschieben/arbeiten usw kann, wollte ich auch das in den Backgroundworker schieben, aber das geht nicht, weil es ein "threadübergreifender Vorgang" sei.

    Dann hab ich versucht, es so zu lösen:

    VB.NET-Quellcode

    1. Public Class Form2
    2. Dim t As New Threading.Thread(AddressOf writing)
    3. Public Sub writing()
    4. For i = 0 To Form1.l.Count - 1
    5. RichTextBox1.Text &= Form1.l(i) & "; "
    6. Next
    7. Me.Show()
    8. End Sub
    9. End Class


    Trotzdem steckt Form1 auch. Wie kann ich die Ergebnisse in Form2 anzeigen lassen, während ich in der Form1 weiterarbeiten kann??(Form2 ist solange unsichtbar)

    Ich blick diese Threads nicht ganz. Kann ich Form2 gleich in einem ganz anderen Thread ausführen lassen, und wenn ja, wie? Ich will nur, dass Form1 währenddessen nicht steckt.

    Danke ;)

    mfg
    Du kannst nicht über einen anderen Thread auf deine Form und deren Control zugreifen.
    Das musst du dann anders lösen.

    Versuch es mit einem Delegaten

    VB.NET-Quellcode

    1. Dim t As New Threading.Thread(AddressOf writing)
    2. Private Delegate Sub Formdelegate(ByVal Formbeitrag As String)
    3. Public Sub writing()
    4. For i = 0 To Form1.Count - 1
    5. Me.Invoke(New Formdelegate(AddressOf Übergabe), i)
    6. Next
    7. Me.Show()
    8. End Sub
    9. Private Sub Übergabe(ByVal Formbeitrag As String)
    10. RichTextBox1.Text &= Form1.l(i) & "; "
    11. End Sub


    LG.L

    VB.NET-Quellcode

    1. Private Sub Übergabe(ByVal Formbeitrag As String)
    2. RichTextBox1.Text &= Form1.l(i) & "; "
    3. End Sub


    Hier bekomme ich aber leider die Meldung, dass i nicht deklariert ist..... WIe kann ich das i an den Sub Übergabe übergeben??
    Sry, hab nicht aufgepasst ^^

    VB.NET-Quellcode

    1. Dim t As New Threading.Thread(AddressOf writing)
    2. Private Delegate Sub Formdelegate(ByVal Formbeitrag As integer)
    3. Public Sub writing()
    4. For i = 0 To Form1.Count - 1
    5. Me.Invoke(New Formdelegate(AddressOf Übergabe), i)
    6. Next
    7. Me.Show()
    8. End Sub
    9. Private Sub Übergabe(ByVal Formbeitrag As integer)
    10. RichTextBox1.Text &= Form1.l(Formbeitrag) & "; "
    11. End Sub


    So müsste es funktionieren.
    LG.L

    Lawliet schrieb:

    Sry, hab nicht aufgepasst ^^

    VB.NET-Quellcode

    1. Dim t As New Threading.Thread(AddressOf writing)
    2. Private Delegate Sub Formdelegate(ByVal Formbeitrag As integer)
    3. Public Sub writing()
    4. For i = 0 To Form1.Count - 1
    5. Me.Invoke(New Formdelegate(AddressOf Übergabe), i)
    6. Next
    7. Me.Show()
    8. End Sub
    9. Private Sub Übergabe(ByVal Formbeitrag As integer)
    10. RichTextBox1.Text &= Form1.l(Formbeitrag) & "; "
    11. End Sub


    So müsste es funktionieren.
    LG.L
    Hm, leider steckt Form1 immer noch während die Zahlen in Form2 eingetragen werden^^(ich kann also Form1 währenddessen nicht bewegen etc)
    Es funktioniert also genauso, wie früher^^

    Hast du/oder auch jemand anderes sonst noch eine Idee??^^

    Danke dir trotzdem schon mal für deine Mühe, ;)^^


    EDIT: @Pociflop : ja, ich schaus mir jetzt mal durch!
    @picoflop
    Nette Sache :) habe ich mir grade auch mal angesehen, gefällt mir auch recht gut ^^

    @Lockerzzz
    Ich nehme mal an du hast praktisch eine Funktion in Form 1 am laufen / im neuen Thread / die auf Form 2 die Controls (betätigt).
    Weshalb schreibst du nicht in Form 2 die Funktionen , Du übergibst Daten von Form1 nach Form 2 aus, und Form 2 übernimmt die Funktion die du geschrieben hast.
    (Im neuen Thread), ich bin mir recht sicher das die Methode mit dem Delegaten funktioniert.

    LG.L

    //Schreibe dir auch gerne ein Beispiel, mit Form1 zu Form2 / Function = neuen Thread. *huh* ^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Lawliet“ ()