Timer führt zu oft durch

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von xxchucki.

    Timer führt zu oft durch

    Ich weiß nicht ob ich grade einfach nur was falsch mache oder der Timer einfach falsch durchgeführt wird...
    Bei Form.Load nach dem Login mache ich den Timer an:

    VB.NET-Quellcode

    1. Timer1.Enabled = True
    2. Timer1.Interval = 10000


    In Timer_Tick steht das:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. WebBrowser1.Navigate("URL")
    3. Timer1.Enabled = False
    4. End Sub


    Und bei WebBrowser1_Complete:

    VB.NET-Quellcode

    1. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    2. ' Dim ts As String = WebBrowser1.Url.AbsoluteUri
    3. 'Dim rp As String = ts.Substring(ts.IndexOf("#") + 1)
    4. ' Dim qp As String = rp.Substring(rp.IndexOf("t") + 1)
    5. 'Dim RegExPattern As String = "<div id=""post_message_16598150"">(?<innertext>)</div>"
    6. ' Dim HTMLTitle As String = Regex.Match(WebBrowser1.DocumentText, RegExPattern).Groups("innertext").ToString()
    7. If WebBrowser1.DocumentText.Contains("<div id=""post_message_16598150"">") Then
    8. MsgBox("YAAY")
    9. Else
    10. MsgBox("NE")
    11. End If
    12. Timer1.Enabled = True
    13. End Sub

    So nachdem das "NE" jetzt kommt und ich auf OK klicke, kommt es noch 5-10x. Warum ist das so?

    xxchucki schrieb:

    Timer1.Enabled = True
    Timer1.Interval = 10000
    Du musst natürlich zuerst das Interval festlegen und den Timer dann auf .Enabled = True setzen.

    Das ist als wenn du das Auto erst startest und dann die Reifen dran machst - wenig Sinn.

    Im Webbrowser_DocumentCompleted Event einen Timer zu starten ist auch keine gute Idee, der wird ja da immer wieder gestartet.
    Wahrscheinlich soll das so eine Anzeige werden, die mit Webinhalten "live" gefüttert wird, oder?
    Ich empfehle dir das einfach in einem neuen Thread zu machen (Thread.Sleep (1000) wartet ;)) und mit einem WebClient den Quelltext herunterzuladen.
    Mit WithEvents bekommst du aus einem WebClient auch noch DownloadCompleted Events raus ;)

    Kevin Hombre schrieb:

    xxchucki schrieb:

    Timer1.Enabled = True
    Timer1.Interval = 10000
    Du musst natürlich zuerst das Interval festlegen und den Timer dann auf .Enabled = True setzen.

    Das ist als wenn du das Auto erst startest und dann die Reifen dran machst - wenig Sinn.

    Im Webbrowser_DocumentCompleted Event einen Timer zu starten ist auch keine gute Idee, der wird ja da immer wieder gestartet.


    Alles klar :) Danke für die Antwort. Ich habe die Codeteile einfach zusammengefügt. Der Interval steht natürlich vor dem Enabled ;)
    Klappt aber trotzdem nicht... Das ist ja eben mein Problem :(


    Memo schrieb:

    Wahrscheinlich soll das so eine Anzeige werden, die mit Webinhalten "live" gefüttert wird, oder?
    Ich empfehle dir das einfach in einem neuen Thread zu machen (Thread.Sleep (1000) wartet ;)) und mit einem WebClient den Quelltext herunterzuladen.
    Mit WithEvents bekommst du aus einem WebClient auch noch DownloadCompleted Events raus ;)


    Ja soll es ;)
    So downloade ich den Quelltext: WebBrowser1.DocumentText
    Wie kann ich es jetzt ändern? Mein Ansatz sieht so aus:

    VB.NET-Quellcode

    1. Dim a As New WebClient
    2. a.DownloadData("URL")
    3. With a. ' Was kommt hier hin, um zu überprüfen ob der DL fertig ist?
    4. End With

    Vielen Dank für die Antwort ;)
    Sorry. Habs geschafft.
    Was muss ich jetzt benutzen? DocumentCompleted oder FileDownload?


    Edit by Manschula: (Unnötiges) Vollzitat entfernt

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

    Der Nachteil von IntelliSense ist die fehlende Dokumentation.
    Wenn du die Funktionalität nicht genau kennst, solltest du MSDN zu Rate ziehen:
    msdn.microsoft.com/de-de/library/ayestehw
    Da steht genau beschrieben, wann welches Event gefeuert wird.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Der Download läuft asynchron vom Browser einem anderen Prozess.
    Du kannst auch den Browser zumachen und der Download läuft dennoch weiter.
    Ich glaube nicht, dass du im Browser selbst ein DownloadComplete-Event bekommst.

    Du kannst ggf. die Infos im FileDownload-Event auswerten und auf den Download-Prozess warten oder auf die heruntergeladene Datei.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Auch geschafft :)
    Danke ;) Habe mit DownloadDocumentAsync, die Datei gespeichert und sie dann ausgelesen.
    Wie kann ich aber jetzt den Inhalt von diesem DIV rauskriegen?
    <div id="poster_a"> TEXT </div>

    VB.NET-Quellcode

    1. Dim RegExPattern As String = "<div id=""poster_a"">(?<innertext>)</div>"
    2. Dim post As String = Regex.Match(inhalt, RegExPattern).Groups("innertext").ToString()

    Wenn ich die Datei öffne und selbst suche, finde ich diesen DIV. Aber so leider nicht :/

    Edit: Habe einfach GetBetween benutzt :) Funktioniert genauso!


    Wie kann man Text aus einem String löschen OHNE Replace zu benutzen?
    Mit Remove funktioniert es bei mir nicht :/

    VB.NET-Quellcode

    1. post = post.Remove(1, "<!-- google_ad_section_end -->")

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „xxchucki“ ()