How do I generate an alert at a specific time in C#?

前端 未结 4 1515
走了就别回头了
走了就别回头了 2020-12-03 03:10

How can i generate an event at a specific time? For example, say I want to generate an alert at 8:00 AM that informs me its 8:00 AM (or an event that informs me of the curre

相关标签:
4条回答
  • 2020-12-03 03:29
    private void Run_Timer()
        {
            DateTime tday = new DateTime();
            tday = DateTime.Today;
            TimeSpan Start_Time = new TimeSpan(8,15,0);
            DateTime Starter = tday + Start_Time;
            Start_Time = new TimeSpan(20, 15, 0);
            DateTime Ender = tday + Start_Time;
            for (int i = 0; i <= 23; i++)
            {
                Start_Time = new TimeSpan(i, 15, 0);
                tday += Start_Time;
                if (((tday - DateTime.Now).TotalMilliseconds > 0) && (tday >= Starter) && (tday <= Ender))
                {
                    Time_To_Look = tday;
                    timer1.Interval = Convert.ToInt32((tday - DateTime.Now).TotalMilliseconds);
                    timer1.Start();
                    MessageBox.Show(Time_To_Look.ToString());
                    break;
                }
            }
        }
    

    We can use this function for getting timer running for times or change it to run on a specific time :D

    0 讨论(0)
  • 2020-12-03 03:30

    Elaborating on dtb's answer this is how I implemented it.

      private void Form1_Load(object sender, EventArgs e)
        {
            System.Threading.TimerCallback callback = new TimerCallback(ProcessTimerEvent);
    
            //first occurrence at
            var dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
    
            if (DateTime.Now < dt)
            {
                var timer = new System.Threading.Timer(callback, null, 
                                                   //other occurrences every 24 hours
                                dt - DateTime.Now, TimeSpan.FromHours(24));
            }
    
        }
    
        private void ProcessTimerEvent(object obj)
        {
            MessageBox.Show("Hi Its Time");
        }
    
    0 讨论(0)
  • 2020-12-03 03:31

    Use the System.Threading.Timer class:

    var dt = ... // next 8:00 AM from now
    var timer = new Timer(callback, null, dt - DateTime.Now, TimeSpan.FromHours(24));
    

    The callback delegate will be called the next time it's 8:00 AM and every 24 hours thereafter.

    See this SO question how to calculate the next 8:00 AM occurrence.

    0 讨论(0)
  • 2020-12-03 03:32

    Does the alert have to be generated by your program? An alternate approach is to use a Scheduled Task (in Windows) to generate the alert. You might need to write a small program that gathers any information from your main application's data files etc.

    There are a couple of main benefits to using this approach:

    1. You don't have to write any code to support the feature. You make use of something built into the operating system. The example is for Windows, but other OSes have the same feature. You can concentrate your development and support effort on your own code.
    2. Your main application doesn't have to be running for the task to fire.
    0 讨论(0)
提交回复
热议问题