Wann Application.DoEvents verwenden ?

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Tibiamicus.

    Wann Application.DoEvents verwenden ?

    **********************************************************************************************************
    Hallo leute,

    ich habe eine ganz simple Frage zu Application.DoEvents...
    Bei einer Function die ich erstellt habe hängt sich die Form immer auf.
    Mit einem backgroundworker wollte Ich es nicht machen , weil es nur eine kleine Aufgabe ist die die Form zum hängen bringt.
    ich möchte es nun mit Application.DoEvents regeln, nur weiß Ich nicht wann Ich es im Code reinschreiben muss.

    Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim html = wc.DownloadString("www.google.de")


    Wo muss Ich nun Application.DoEvents machen damit sich die Form nicht aufhängt ?

    **************************************************************************************************************
    DoEvents() ist eine böse Funktion, sie gestattet Dir z.B. Dein Programm wann immer auch zu beenden.
    Du musst den DownLoad asynchron machen oder in einen Thread verlagern, dann hängt sich die Form nicht auf.
    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!

    Tibiamicus schrieb:

    Mit einem backgroundworker wollte Ich es nicht machen , weil es nur eine kleine Aufgabe ist die die Form zum hängen bringt.
    ich möchte es nun mit Application.DoEvents regeln


    abgesehen dass du einen einzigen befehl garnicht mit doevent kombinieren kannst, ist dies der falsche weg. nutz nen thread / backgroundworker oder lass es, alles andere ist falsch
    außerdem, wenn es die form zum hängen bringt, ist es wohl keine kleine aufgabe :P
    und nebenbei, mach mal option strict on ;)

    Tibiamicus schrieb:

    wc.DownloadString
    Gibt's auch in der nicht blockierenden asynchronen Variante.
    Falls du eine Nachbearbeitung machen willst, die erst bei erfolgtem Download erfolgen kann, kannst du diese im entsprechenden Event durchführen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,
    Ich habe es jetzt ganz einfach mit einem eigenen Thread gemacht
    Hier ein beispiel , vielleicht kennen welche die Seite "www.funnyordie.com"

    und dazu habe Ich einen Downloader erstellt:

    VB.NET-Quellcode

    1. Private Sub FunnyorDieDownload()
    2. Try
    3. Dim ds As New Net.WebClient
    4. 'Get String
    5. Dim h = ds.DownloadString(TextBox1.Text)
    6. Dim t As String = h.Substring(h.IndexOf("function writePlayer() {") + 24)
    7. t = t.Remove(t.IndexOf("/><source"))
    8. Dim u As String = h.Substring(h.IndexOf("function writePlayer() {") + 24)
    9. u = u.Remove(u.IndexOf(";"))
    10. 'get highest Quality
    11. Dim j = ControlChars.Quote & "><source src="
    12. Dim finalt = t.Substring(t.IndexOf(j) + 15)
    13. finalt = finalt.Remove(finalt.IndexOf(".mp4") + 4)
    14. Dim q As String
    15. Select Case True
    16. Case finalt.Contains("2500")
    17. q = "v2500"
    18. Case finalt.Contains("1800")
    19. q = "v1800"
    20. Case finalt.Contains("1200")
    21. q = "v1200"
    22. Case finalt.Contains("600")
    23. q = "v600"
    24. Case finalt.Contains("400")
    25. q = "v400"
    26. Case finalt.Contains("200")
    27. q = "v200"
    28. Case finalt.Contains("110")
    29. q = "v110"
    30. Case Else
    31. MsgBox("Diese Video ist nicht verfügbar", MsgBoxStyle.Exclamation)
    32. Exit Sub
    33. End Select
    34. 'get to replace DownlaodLink
    35. Dim a = u.Substring(u.IndexOf("/><source src=") + 15)
    36. a = a.Remove(a.IndexOf(".mp4") + 4)
    37. 'get full Downlaodlink
    38. Dim b = a.Substring(a.IndexOf("v/") + 1)
    39. b = b.Substring(b.IndexOf("/v") + 1).Replace(".mp4", String.Empty)
    40. Dim finalurl = CStr(a.Replace(b, q))
    41. TextBox1.Invoke(Sub() TextBox1.Text = finalurl)
    42. Catch ex As Exception
    43. MsgBox(ex.ToString)
    44. End Try
    45. End Sub
    46. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    47. Dim Downloader As New System.Threading.Thread(AddressOf FunnyorDieDownload)
    48. Downloader.Start()
    49. End Sub


    testet diesen code mal aus :)
    @Tibiamicus:
    Nur mal als Zwischenfrage:
    Wo findet man schneller heraus,
    welcher Fehler aufgetreten ist,
    wo der Fehler aufgetreten ist,
    warum der Fehler aufgetreten ist
    und was man dagegen tun kann?

    Hier?:

    Oder hier?:
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Wie meinst du des ?

    Edit://

    Wenn du meinst dass du den fehler abfangen willst dann füg noch dass hinzu:

    VB.NET-Quellcode

    1. Try
    2. If TextBox1.Text.StartsWith("http://www.funnyordie.com") Then
    3. 'Hier der code
    4. Else
    5. MsgBox("Die eingegebene URL ist keine gültige Funnyordie-URL", MsgBoxStyle.Exclamation)
    6. End If
    7. Catch ex As Net.WebException
    8. MsgBox("URL exestiert nicht")
    9. End Try

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

    @Tibiamicus:
    *Facedesk*
    Genau das wollte ich damit vermeiden.

    Die Antwort lautet "Beim zweiten Bild".
    Und wie man sieht, habe ich das Try ausgeklammert.

    Es geht mir um das hier:
    [VB.NET] TryCatch ist ein heißes Eisen
    [Allgemein] [Sammlung] Sinnvolle Verwendungen für Try-Catch

    Ich wollte daraus ein "nachdenken und verstehen"-Rätsel mit Dir machen, aber das habe ich jetzt nicht erwartet.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils