c# - tener - ¿Cuál es la forma más eficiente de llamar a un método cada 20 segundos?
metodos y funciones en c# (3)
Puede usar esto, solo asegúrese de que lo que esté haciendo sea seguro para subprocesos.
using System.Threading;
public void DoStuff(IPerson person)
{
new Timer(ProcessPerson, person, 0, 20000);
}
public void ProcessPerson(object threadState)
{
IPerson person = threadState as IPerson;
// do your stuff
}
Me gustaría llamar a un método que pasa un parámetro cada 20 segundos, por ejemplo, publicPid ProcessPerson (persona de IPerson)
He estado leyendo las diferentes opciones de temporizador y me preguntaba si alguien podría recomendar la forma más eficiente de hacerlo.
Además, ¿hay una manera de mantener el parámetro fuertemente tipado en lugar de usar el objeto y luego tener que convertirlo a IPerson?
Gracias por tu ayuda.
Yo iría para System.Threading.Timer . Tenga en cuenta que Windows no es un sistema operativo en tiempo real, por lo que habrá alguna variación en el tiempo, independientemente del mecanismo que elija.
No dijo si esta función realizará algún tipo de actualizaciones de la interfaz de usuario, pero en caso de que también sepa que la función de devolución de llamada se ejecutará en un subproceso diferente, por lo que, en algunos casos, como la realización de actualizaciones de la interfaz de usuario, deberá tomar las medidas adecuadas. Acción para reunir la solicitud de nuevo al subproceso de la interfaz de usuario.
Para hacer que la solicitud vuelva al hilo de la interfaz de usuario, puede hacer lo siguiente:
Para WinForms puedes usar Control.Invoke
Para WPF puedes usar Dispatcher.Invoke
O la variante Async BeginInvoke
Un System.Threading.Timer
es lo que necesitas:
Proporciona un mecanismo para ejecutar un método a intervalos específicos.
Utilice un delegado TimerCallback para especificar el método que desea que ejecute el temporizador. El delegado del temporizador se especifica cuando el temporizador se construye y no se puede cambiar. El método no se ejecuta en el hilo que creó el temporizador; se ejecuta en un hilo ThreadPool suministrado por el sistema.
También está el System.Windows.Forms.Timer
:
Implementa un temporizador que genera un evento en intervalos definidos por el usuario. Este temporizador está optimizado para su uso en aplicaciones de Windows Forms y debe usarse en una ventana.
Este temporizador de Windows está diseñado para un entorno de un solo subproceso donde se utilizan subprocesos de interfaz de usuario para realizar el procesamiento.
Y no te olvides de System.Timers.Timer
:
El componente Timer es un temporizador basado en servidor, que le permite especificar un intervalo recurrente en el cual el evento Elapsed se genera en su aplicación.
El temporizador basado en servidor está diseñado para su uso con subprocesos de trabajo en un entorno multiproceso. Los temporizadores de servidor pueden moverse entre los hilos para manejar el evento Elapsed elevado, lo que resulta en una mayor precisión que los temporizadores de Windows para elevar el evento a tiempo.
Así que investiga cada uno y decide cuál funciona mejor en tu caso.