Pergunta

Como posso gerar um evento em um horário específico? Por exemplo, diga que quero gerar um alerta às 8:00 que me informa suas 8:00 (ou um evento que me informa sobre o horário atual a qualquer momento).

Foi útil?

Solução

Use o System.Threading.timer classe:

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

o callback O delegado será chamado na próxima vez que forem 8:00 da manhã e a cada 24 horas depois.

Ver isso é tão pergunta Como calcular a próxima ocorrência das 8:00 da manhã.

Outras dicas

Elaborando a resposta do DTB É assim que eu a implementei.

  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");
    }

O alerta precisa ser gerado pelo seu programa? Uma abordagem alternativa é usar um Tarefa programada (no Windows) Para gerar o alerta. Pode ser necessário escrever um pequeno programa que reúna qualquer informação dos arquivos de dados do seu aplicativo principal etc.

Existem alguns benefícios principais em usar esta abordagem:

  1. Você não precisa escrever nenhum código para oferecer suporte ao recurso. Você usa algo incorporado ao sistema operacional. O exemplo é para o Windows, mas outros sistemas operacionais têm o mesmo recurso. Você pode concentrar seu esforço de desenvolvimento e suporte em seu próprio código.
  2. Seu aplicativo principal não precisa estar em execução para que a tarefa seja disparada.
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;
            }
        }
    }

Podemos usar esta função para fazer o timer em execução para horários ou alterá -lo para executar em um horário específico: D

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top