Vergleieche in Backgroundworker anstellen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Vergleieche in Backgroundworker anstellen

    Hallo Community,
    ich habe ein Problem, welchens entsteht, wenn ich einen Vergleich in einem Backgroundworker anstellen möchte.
    Ich möchte in einer if-abfrage den Inhalt einer Textbox mit dem Inhalt eines Labels vergleichen.
    Leider wird dieser Vergleich nicht angestellt und die if-Schleife gar nicht berücksichtigt(?)

    VB.NET-Quellcode

    1. If TextBox1.Text = Label7.Text Then
    2. MsgBox("test")
    3. End If


    Kennt jemand dieses Problem und weiß es zu lösen?
    Vielen Dank für eure Hilfe im Vorraus.
    Vielen Dank für deine Antwort,
    aber leider funktioniert auch dies nicht.
    Ich habe nun zwei long Variablen (da ich nur Zahlen vergleichen möchte) erstellt, die inhalt enthalten.
    An einer Stelle enthalten diese den gleichen inhalt. An der Stelle soll anhand einer If-Abfrage eine Massagebox gezeigt werden

    VB.NET-Quellcode

    1. If Eingabe = Wert Then
    2. MsgBox("hi")
    3. End If
    Bitteschön:

    VB.NET-Quellcode

    1. Imports System.Threading
    2. Public Class Form1
    3. Dim Anhalten As String
    4. Dim Eingabe As Long
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. Eingabe = TextBox1.Text
    7. BackgroundWorker1.RunWorkerAsync()
    8. End Sub
    9. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    10. Control.CheckForIllegalCrossThreadCalls = False
    11. Dim Wert As Long
    12. Do
    13. If Label4.Text = "9" Then
    14. Label3.Text = Label3.Text + CInt("1")
    15. Label4.Text = "0"
    16. End If
    17. If Label3.Text = "9" Then
    18. Label2.Text = Label2.Text + CInt("1")
    19. Label3.Text = "0"
    20. End If
    21. If Label2.Text = "9" Then
    22. Label1.Text = Label1.Text + CInt("1")
    23. Label2.Text = "0"
    24. End If
    25. Label4.Text = Label4.Text + CInt("1")
    26. Wert = Label1.Text & Label2.Text & Label3.Text & Label4.Text
    27. Ausgabebox.Items.Add(Wert)
    28. If Eingabe = Wert Then
    29. MsgBox("hi")
    30. End If
    31. Loop Until Anhalten = "stop"
    32. End Sub
    33. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    34. Anhalten = "stop"
    35. End Sub
    36. End Class

    Es ist eigentlich ein ganz einfaches Programm, mit dem ich listen aller vierstelligen Zahlen erstellen kann.
    Die Label 1-4 sind die vier Stellen der Zahl. Diese Zahl wird nach jedem Umlauf der Loop-Schleife in eine Listbox geschrieben.
    In die Textbox 1 schreibt man die höchste Zahl, die ausgegeben werden soll.

    Artentus schrieb:

    1. Option Strict On!
    2. Control.CheckForIllegalCrossThreadCalls = False weg damit.
    3. Loop Until Anhalten = "stop" es gibt auch Boolean.
    1. was ist das?
    2. wenn ich das entferne, bekomme ich Fehlermeldungen beim Beschreiben eines Labels
    3. Dann kommt folgende Fehlermeldung: Ungültige Konvertierung von der Zeichenfolge stop in Typ Boolean.
    1. Warum Strict On Option Strict aktivieren
    2. Das ist auch gut, dass du nen Fehler bekommst, weil du machst schließlich auch was falsch. Jede Zeile, in der ein Steuerelement vorkommt, darf nicht im Backgroundworker ausgeführt werden. So wie ich das sehe, sind das eigentlich alle, also kannst du dir den Backgroundworker sparen.
    3. Ein Boolean ist ja auch kein String, sondern nur True oder False.

    Artentus schrieb:

    2. Das ist auch gut, dass du nen Fehler bekommst, weil du machst schließlich auch was falsch. Jede Zeile, in der ein Steuerelement vorkommt, darf nicht im Backgroundworker ausgeführt werden. So wie ich das sehe, sind das eigentlich alle, also kannst du dir den Backgroundworker sparen.
    Ich möchte das schon in nem Backgroundworker ausführen, da ich nicht möchte, dass die Form "einfriert" und den Stop-Knopf noch bedienen können möchte.

    vbwave schrieb:

    da ich nicht möchte, dass die Form "einfriert"
    Arbeite mit Variablen, nicht aber mit Inhalten von Controls.
    Was soll denn Dein Code tun?
    Mehrstellig zählen?
    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!
    Kann ich denn mit dem reinen Verzicht vom Ansteuuern von Controlls das anfängliche Problem lösen? Alles Andere funktioniert ja bestens, bis auf den Vergleich zweier Variablen. Das Programm soll alle Zahlen vom 0 bis zu der eingegebenen Zahl in eine Listbox schreiben.

    vbwave schrieb:

    Das Programm soll alle Zahlen vom 0 bis zu der eingegebenen Zahl in eine Listbox schreiben.
    Probier mal dies, ohne BGW:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim ll As New List(Of Integer)
    3. ll.AddRange(Enumerable.Range(0, 10000))
    4. ListBox1.DataSource = ll
    5. End Sub
    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!