Pergunta

É a sua maneira de executar um delegate ou event em C # quando os segundos, minutos, horas, ... mudança no sistema-relógio, sem o uso de um timer que verifica cada milissegundo se a propriedade mudou e executa o evento com um atraso máximo de um milésimo de segundo.

Eu quero assim evitar polling e acionar um evento em um determinado momento.

Foi útil?

Solução

Se a sua pergunta é: "? Como faço para executar um delegado cada segundo / minuto / hora inteira"

Para intervalos de minutos e horas, você poderia fazer algo como mostrado na minha resposta a esta pergunta SO:

Isto deve ser bastante precisa, mas não será exato para o milissegundo.

Para o segundo intervalos, eu iria com um temporizador com um simples 1-segunda-intervalo. Da perspectiva de um usuário Eu acho que não há muita diferença se executa a ação em xx: xx: xx.000 ou em xx: xx:. Xx.350

Outras dicas

Você pode se inscrever para SystemEvents.TimeChanged . Este é acionado quando o relógio do sistema é alterado.

Eu resolvi isso em um aplicativo de formulários, definindo o intervalo para (1000 - DateTime.Now.Millisecond)

        _timer1 = new System.Windows.Forms.Timer();
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
        _timer1.Enabled = true;
        _timer1.Tick += new EventHandler(updateDisplayedTime);

e no manipulador de eventos redefinir o intervalo para impedir a dispersão.

        <handle event>
        _timer1.Interval = (1000 - DateTime.Now.Millisecond);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top