Estoy intentando disparar el controlador de eventos asignado a mi simulación de temporizador. ¿Cómo puedo probar este método privado aquí?¿Cómo puedo ejecutar el controlador de eventos asignado a un simulacro?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
La clase de cliente asigna un controlador de eventos a este objeto. Quiero probar la lógica en esta clase.
_timer.Elapsed += ResetExpiredCounters;
Y el método asignado es privado
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
quiero tener este controlador de eventos en mi maqueta y ejecutarlo de alguna manera. ¿Cómo puedo hacer esto?
Actualización:
me di cuenta que estaba criando el evento antes de que yo le asigna el controlador de eventos. Corregí eso, pero sigo teniendo este error:
planteo así:
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
o
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
Ambos no va a funcionar.
Actualización:
Aquí es lo que funcionó para mí. Tenga en cuenta que no es útil si está tratando de pasar información al controlador de eventos como Jon señaló en los comentarios. Solo lo estoy usando para burlarme del wrapper de la clase System.Timers.Timer.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
Al final, esto no ayudará en absoluto si es necesario utilizar argumentos del evento, ya que será siempre nula. Sin embargo, es la única forma, ya que ElapsedEventArgs solo tiene un constructor interno.
"objeto de tipo 'System.EventArgs' no puede Convierta para escribir 'System.Timers.ElapsedEventArgs' "- ¿Qué parte no está clara? – Groo
Todavía obtengo ese error incluso si paso ElapsedEventArgs. ¿Cómo puedo plantear ese evento? –
Es 'ElapsedEventHandler' en su interfaz' ITimer' realmente 'System.Timers.ElapsedEventHandler'? – Groo