Frage

Vor kurzem ich versuche, eine Kalender-Anwendung zu machen, das das aktuelle Jahr-Monat-Datum für den Benutzer angezeigt werden. Das Problem ist, wenn der Benutzer gonna meine Anwendung halten, auch für den nächsten Tag läuft, wie ich benachrichtigt, ?? Wie soll ich das Datum angezeigt ändern? Ich will nicht das aktuelle Datum abfragen, sie zu aktualisieren. Ist das möglich in c #.

Hinweis: Ich habe versucht, aus der SystemEvent.TimeChanged Veranstaltung, aber es funktioniert nur, wenn der Benutzer manuell die Uhrzeit / Datum über das Bedienfeld ändert

.
War es hilfreich?

Lösung

Können Sie einfach trainieren die Anzahl der Sekunden bis Mitternacht, und dann für die lange schlafen?

Andere Tipps

@ OddThinking Antwort funktioniert (Sie einen Timer für das Intervall statt Schlaf einstellen könnten). Eine andere Möglichkeit wäre, einen Timer mit einem 1-Minuten-Intervall einstellen und einfach überprüfen, ob das Systemdatum geändert hat. Da Sie nur einigen leichten Code einmal pro Minute ausgeführt wird, bezweifle ich das Kopf noticable sein würde.

public void Main()
{

    var T = new System.Timers.Timer();

    T.Elapsed += CallBackFunction;

    var D = (DateTime.Today.AddDays(1).Date - DateTime.Now);

    T.Interval = D.TotalMilliseconds;

    T.Start();

}

private void CallBackFunction(object sender, System.Timers.ElapsedEventArgs e)
{

    (sender as System.Timers.Timer).Interval = (DateTime.Today.AddDays(1).Date - DateTime.Now).TotalMilliseconds;

}
Versuchen

Blick in die Ereignisse Überwachung WMI, sollten Sie eine WQL Ereignisabfrage erstellen können, die den Tag der Woche Wechsel überwacht (d ManagementEventWatcher usw.) und dann Setup ein Event-Handler, der ausgelöst wird, wenn das Ereignis eintrifft.

using System;
using System.Management;

class Program
{
    public static void Main()
    {
        WqlEventQuery q = new WqlEventQuery();
        q.EventClassName = "__InstanceModificationEvent ";
        q.Condition = @"TargetInstance ISA 'Win32_LocalTime' AND TargetInstance.Hour = 22 AND TargetInstance.Minute = 7 AND TargetInstance.Second = 59";

        Console.WriteLine(q.QueryString);

        using (ManagementEventWatcher w = new ManagementEventWatcher(q))
        {
            w.EventArrived += new EventArrivedEventHandler(TimeEventArrived);
            w.Start();
            Console.ReadLine(); // Block this thread for test purposes only....
            w.Stop();
        }
    }

    static void TimeEventArrived(object sender, EventArrivedEventArgs e)
    {
        Console.WriteLine("This is your wake-up call");
        Console.WriteLine("{0}", new
        DateTime((long)(ulong)e.NewEvent.Properties["TIME_CREATED"].Value));
    }
}

Wie über einen Thread, die Änderung Datum überprüft. Der Faden kann einige Ereignisse hat, dass die Kontrollen, die diese Informationen benötigen abonnieren können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top