Verhindern das mein Tool "keine Rückmeldung" anzeigt

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von mathysjp.

    Verhindern das mein Tool "keine Rückmeldung" anzeigt

    Ich lese in eine Listbox sehr viele Daten ein. Die Anzahl ist Variabel 10 - 500'000.
    Wenn ich dann zb in der Listbox rumeditiere, braucht mein Tool manchmal gut und gerne 30 sek bis die Aufgabe erledigt ist.
    Nun, wenn man während dieser Zeit auf dem Form herum klickt erhält man im Titel irgendeinmal "keine Rückmeldung". Was dann aber nicht heisst das das Tool gestorben ist!

    Lässt sich das irgendwie umgehen? Wie?
    Hallo

    Dazu kannst DoEvents verwenden.

    Beispiel:

    VB.NET-Quellcode

    1. For N As Long = 0 To 100000
    2. ' Bewirkt dass wenn N den Wert 200, 400, 600 u.s.w. hat, die Anwendung andere Ereignisse behandeln kann
    3. If N Mod 200 = 0 Then
    4. My.Application.DoEvents()
    5. End If
    6. ' Dein Code
    7. Next

    Würde DoEvents bei jedem Schleifendurchgang ausgeführt, würde die es keine 30 Sekunden dauern sondern Minuten.
    Danke für dein Beispiel.
    Das mit der Schleife habe ich nicht ganz verstanden, vielleicht kannst du mir das noch ein wenig ausführlicher erklären.

    Ich habe jetzt mal deinen Code eingebaut.Nur merke ich gar keine Veränderung.

    Also ich nehme deinen Code und mache ihn in das Clickerreignis des Buttons. Dann dort wo 'dein Code steht, habe ich eine Funktion die mir 125'000 Listboxeinträge löscht.

    Die Anwendung geht währen dieser Zeit immer noch auf "keine Rückantwort".
    Also dann so?
    Vom Gefühl her geht es auf jeden Fall ...

    VB.NET-Quellcode

    1. Try
    2. Dim results As New System.Text.StringBuilder
    3. For Each itm As String In ListBox1.Items
    4. If itm.Contains(txtDelListboxItems.Text) Then
    5. results.AppendLine(itm)
    6. '--------------------------------------------------
    7. Dim i As Integer
    8. For i = (ListBox1.Items.Count - 1) To 0 Step (-1)
    9. For N As Long = 0 To 100000
    10. ' Bewirkt dass wenn N den Wert 200, 400, 600 u.s.w. hat, die Anwendung andere Ereignisse behandeln kann
    11. If N Mod 200 = 0 Then
    12. ListBox1.Items.Remove(itm)
    13. My.Application.DoEvents()
    14. End If
    15. Next
    16. Next i
    17. '---------------------------------------------------
    18. End If
    19. Next
    20. If results.Length > 0 Then
    21. End If
    22. Catch ex As Exception
    23. 'MessageBox.Show(ex.ToString)
    24. End Try
    ich nehm mal an dass immer ein Item gelöscht werden soll, also

    VB.NET-Quellcode

    1. For N As Long = 0 To 100000
    2. ListBox1.Items.Remove(itm)
    3. ' Bewirkt dass wenn N den Wert 200, 400, 600 u.s.w. hat, die Anwendung andere Ereignisse behandeln kann
    4. If N Mod 200 = 0 Then
    5. My.Application.DoEvents()
    6. End If
    7. Next