HttpWebRequest - Timer Alternative

  • VB.NET

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

    HttpWebRequest - Timer Alternative

    Hallo Community,

    ich arbeite gerade an einer Automatiesierungs-Software für private Zwecke.

    Dieses Programm soll in verschiedenen intervallen, unterschiedliche Dinge ausführen. Ich habe es momentan alles sehr unschön mit fast 8 Timer geregelt, d.H habe jedem Timer den bestimmten Intervall zugewiesen und in der Sub Tick das hereingeschrieben was ausgeführt werden soll. So nun kommen aber immer mehr Funktionen dazu und ich kann ja nicht XXX Timer nehmen, weil das Programm jetzt schon nach ca. 1h schon abstürzt.

    Hat jemand für mich eine sauberere Lösung?.

    Bin für jeden Vorschlag offen
    Gruß
    Naji
    Nunja... Generell... EIn Timer ist halt schon dafür da, immer wiederkehrende Ding bei festen Zeitintervallen zu erledigen.
    Sicher dass es an der Anzahl der Timer liegt, dass es abstürzt?
    Wenn die Intervalle VIelfache voneinander sind kannst du sie in dem gleichen Timer abhandeln.
    Ansonsten... mal die Möglichkeiten von Events überdenken...
    muss es regelmäßig abgefragt werden... oder haut der ABgefragte Wert bei einer Änderung ein Event raus?
    @FloFuchs: Joar daher habe ich dies ja bisher auch so gemacht. Ob es jetzt genau an der Anzahl der Timer liegt kann ich leider nicht bestätigen. Das Problem das jedes Ereigniss was ausgeführt werden soll einen anderen Intervall hat. Über Events habe ich nochnicht nachgedacht, da ich damit noch nie gearbeitet habe.

    @noBlubb: Ist das dann sowas wie ein BackGroundWorker? evlt. ne kleine Erklärung?

    Naji schrieb:

    Ich habe es momentan alles sehr unschön mit fast 8 Timer geregelt

    Man braucht in der Regel nur 1 Timer: im Timer.Tick Event für jede Deiner Aktionen den Zeitpunkt der letzten Aktion abspeichern und dann abfragen ob das Intervall schon abgelaufen ist ( DateTime.Now.subtract(lastAction) > actionInterval)

    Allerdings sind httpWebRequest zeitintensiv und bringen Deine GUI zum ruckeln. Insofern besser in einen Thread auslagern und mit Thread.Sleep regelmässig in den Schlaf schicken. Noch besser mit WaitHandle.WaitOne(interval) da dann auch das Aufwecken on Demand möglich ist.

    Naji schrieb:

    Ist das dann sowas wie ein BackGroundWorker

    Backgroundworker waren früher dazu da den Einstieg in das Threading zu erleichtern. Mittlerweile ist das Verwalten von Threads so einfach geworden, dass der BGW ziemlich obsolet geworden ist.

    Naji schrieb:

    Über Events habe ich nochnicht nachgedacht, da ich damit noch nie gearbeitet habe

    In .NET arbeitest Du schon lange mit Events, jeder Button.Click ist einer.
    Vielleicht solltest du zuerst FloFuchs Frage beantworten. Was für Ergebnisse musst du verarbeiten?

    Im Prinzip, ja.

    Quellcode

    1. Private updategui As Boolean = True
    2. Private updatethread As Thread
    3. Sub StartMain()
    4. updatethread = New Thread(AddressOf DoBackgroundWork)
    5. updatethread.Start()
    6. End Sub
    7. Sub EndMain()
    8. updategui = False
    9. End Sub
    10. Sub DoBackgroundWork()
    11. While updategui
    12. '..
    13. Thread.Sleep(100)
    14. End While
    15. End Sub


    updategui kannst du natürlich umbenennen, solltest du allerdings beim Beenden deiner Anwendung auf false setzen, damit kein weiterer Vorgang gestartet wird...
    Problem ist natürlich, das dieser Thread dann noch "ausschläft". Sollte aber kein Problem sein, da er eh nicht mehr viel macht.
    Bei Sleep setzt du die Zeit in Millisekunden ein, die du warten willst und dann schreibste da noch deine Requests rein. Vorsicht dann natürlich mit dem Zugriff auf Controls einer Hauptform,
    denn du bist in einem anderen Thread unterwegs und müsstest also Invoken...Aber alles kein Problem und gibt es schönere Tutorials zu, als wenn ich das jetzt hier nochmal alles schreiben würde ^^