Event, welches einmal in der Woche ausgelöst wird

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Wenn du es relativ sicher haben willst musst du die Zeit aus dem Internet abfragen. Timer etc fallen sicherlich auch aus, da der PC wahrscheinlich nicht 24/7/365 läuft.
    Du musst die Zeit ja nicht jede 10ms wissen, jede 5 Minuten oder vllt jede stunde abzufragen (mittels timer und bei programmstart => windows gestartet) sollte reichen.
    Evtl:
    [Beta] ScheduleLib


    Und das Datum immer beim triggern von Tick neu setzen:

    VB.NET-Quellcode

    1. '@Tick
    2. dim t = TimeSpan.fromDays(7)
    3. scheduler.ChangeDate(now + t)
    /nicht getestet

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

    @rotherford

    Ich bekomm die Meldung : Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    VB.NET-Quellcode

    1. Private Sub ScheduleTick() 'Handles Scheduler.Tick
    2. MessageBox.Show("Erreicht")
    3. End Sub
    4. Private Sub ScheduleChanged() 'Handles Scheduler.Changed
    5. MessageBox.Show("Zeit geändert")
    6. End Sub
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. AddHandler Scheduler.Tick, AddressOf ScheduleTick
    9. AddHandler Scheduler.Changed, AddressOf ScheduleChanged
    10. If My.Settings.Zeit = False Then
    11. Dim t = TimeSpan.FromMinutes(1)
    12. Schedule.ChangeDate(Now + t)
    13. My.Settings.Zeit = True
    14.  
    15. Else
    16. End If




    Bei : AddHandler Scheduler.Tick, AddressOf ScheduleTick

    VB.NET-Quellcode

    1. If My.Settings.Zeit = False Then
    2. Dim t = TimeSpan.FromMinutes(1)Scheduler = New ScheduleLib.Scheduler(Now + t)
    3. My.Settings.Zeit = True
    4. AddHandler Scheduler.Tick, AddressOf ScheduleTickAddHandler Scheduler.Changed, AddressOf ScheduleChanged
    5. Label2.Text = My.Settings.Zeit.ToStringElse
    6. Label2.Text = My.Settings.Zeit.ToString
    7. End If

    Wenn ich jetzt starte und beende (eine minute warte) passiert nichts also die msgbox wird nicht angezeigt :(


    Ok ^^

    VB.NET-Quellcode

    1. Imports DevExpress.XtraEditors.Controls
    2. Imports MySql.Data.MySqlClient
    3. Imports System.Text
    4. Imports ScheduleLib.Scheduler
    5. Public Class Form1
    6. Private WithEvents Scheduler As ScheduleLib.Scheduler
    7. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    8. If My.Settings.Zeit = False Then
    9. Dim t = TimeSpan.FromMinutes(1)
    10. Scheduler = New ScheduleLib.Scheduler(Now + t)
    11. My.Settings.Zeit = True
    12. AddHandler Scheduler.Tick, AddressOf ScheduleTick
    13. AddHandler Scheduler.Changed, AddressOf ScheduleChanged
    14. Label2.Text = My.Settings.Zeit.ToString
    15. Else
    16. Label2.Text = My.Settings.Zeit.ToString
    17. End If
    18. Dim conn As MySqlConnection
    19. conn = New MySqlConnection
    20. conn.ConnectionString = "server=geheim;" & "user id=geheim;" & "password=geheim;" & "database=geheim"
    21. Try
    22. conn.Open() ' Verbindung öffnen
    23. PictureBox1.BackgroundImage = My.Resources.online
    24. Catch myerror As MySqlException
    25. PictureBox1.BackgroundImage = My.Resources.offline
    26. End Try
    27. '@Tick
    28. End Sub
    29. Private Sub ScheduleTick() 'Handles Scheduler.Tick
    30. ' Tick Event wenn Datum/Zeit oder Interval erreicht
    31. MessageBox.Show("Erreicht")
    32. End Sub
    33. Private Sub ScheduleChanged() 'Handles Scheduler.Changed
    34. ' Change Event wenn das Datum/Zeit oder Interval verändert wurde
    35. MessageBox.Show("Zeit geändert")
    36. End Sub
    so vom anggugge findich, müsste eiglich funzen (d.h.: absolut keine Gewähr).

    Also durchaus möglich, dass die Scheduler-Lib Ranz ist.

    (Ich für mein Fall würde auch den Teufel tun, und eine 3rd-party-Dll einbinden, nur wennich was haben will, was gelegentlich mal auf die Uhr gucken tut.)
    Was nützt es, ein Programm zu schreiben / zu nutzen, was aus nem NWET die Zeit holt, wenn dann einer den Netzwerkstecker zieht oder die Fritzbox ausschaltet?
    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 mir nicht vorstellen, das es überhaupt einen einfachen weg für eine sichere Lösung gibt.

    Weg 1: Ein Timer, der die Zeit hochzählt. Sehr schlecht, was wenn der PC nicht am dauerlaufen ist? Für mich keine Option

    Weg 2: Ein Timer, der gelegentlich auf die Windows-Uhrzeit schaut
    -> lässt sich manipulieren

    Weg 3: Die Uhrzeit aus dem Internet bestimmen
    -> relativ sicher
    -> Problem wenn kein Internetz da

    Mir fällt für "Weg 4" nur eine Lösung ein die mit gewissen Kosten verbunden ist - aber so eine eigene Atomuhr ist bestimmt auch geil^^
    Alternativ könntest du 2 und 3 vermischen, nur bei Programmstart wird die Windowsuhr programmintern mit der Internetzeit gesynct. Zur Programmlaufzeit sollte es möglich sein Manipultionsversuche aufzudecken und einfach herauszurechnen. Es wird allerdings zum Starten des Programms Internet benötigt - nicht optimal. Kann mir aber nicht vorstellen, dass du da ein Hyper-Super-Dupa-Geheimprogramm schreibst, dass eine manipulationssichere Uhrzeit braucht. Wenn doch, wäre es ein Kompromiss zu sagen, dass das Event (erklär mal! xD) ohne Internetzeit-Bestätigung nicht gestartet wird?

    goraxer schrieb:

    Wo gibts sowas zu kaufen?
    Da muss Deine Oma länger als 100 Jahre für Strümpfe stricken. :D
    Kannst ja mal in Braunschweig nachfragen, ob Du die alte für Lau bekommen kannst.
    ----
    Hast Du Angst, dass jemand Dein Programm zum Stolpern bringt?
    Das sollte Dir doch völlig egal sein, denn auf Deinem Rechner wird das ja nicht passieren.
    Nimm die Uhr vom Rechner und fertig oder ruf den telefonischen Weckdienst an.
    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!
    Die Lib funktioniert.
    Ich habe auch den Code von oben probiert (ausser dem My.Settings und Sql Dingens) und bei mir kommt eine Messagebox mit "Erreicht".

    Die Lib macht nichts anderes als intern einen Threading.Timer zu initialisieren welcher einmal tickt wenn die Anzahl der Millisekunden bis zum gewünschten Zeitraum verstrichen ist.
    Wenn das nicht funktioniert liegt es vermutlich an etwas anderem.

    Welches OS hast du?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Wenn du was mit Hardware willst:
    Arduino + RTC (Real Time Clock)

    Dann hast due eine Uhr die immer läuft und abgerufen werden kann, und auch net manipulierbar ist, aussert jemand proggt den Arduino um, das kann man aber mit einem Befehl sperren :D

    mfg Ebrithil
    Mein Erstes Tutorial: Erweitertes Arduino Tutorial

    Simpler D&D FTP Uploader: Edge-Load