2011-04-01 15 views
5

estoy trabajando en C# 2010 y tengo un temporizador:C# Funciones del temporizador?

private Timer m_Timer; 


void KA(string SendStuff, object State) 
{ 

} 

m_Timer = new Timer(new TimerCallback(KA(DATA))); 

Quiero que este temporizador para llamar a la función de "KA", pasando lo que sea "DATA" es a la misma.

DATOS es una cadena

¿Cómo iba a pasar a utilizar un temporizador de información a la función de "KA"?

Gracias

Respuesta

8

puede utilizar una expresión delegado/lambda:

string stuff = "hi"; 
Timer t = new Timer(new TimerCallback(_ => KA(stuff, null))); 

Editar:

Tras el examen y la retroalimentación de una versión más limpia y simplificada es:

string stuff = "hi"; 
Timer t = new Timer(state => KA(stuff, state)); 
+0

Por qué el '_' (subrayado)? Debería ser 'state => KA (cosas, estado)' – digEmAll

+0

ambos funcionan - al OP no le interesaba el estado, solo su cadena 'stuff' así que no necesitaba el estado como argumento. – BrokenGlass

+0

Pregunta intrigante: ¿Qué sucede allí si las cosas se modifican antes de que se active el temporizador? – pdr

4

Creo que esto es lo que busca

private Timer m_Timer; 

void KA(object state) 
{ 
    string data = (string) state; 
} 

m_Timer = new Timer(new TimerCallback(KA), DATA); 
+0

Otro ejemplo está aquí: http://www.dotnetfunda.com/codes/code460-working-with-timercallback-delegate.aspx – Shawn

0

Pruebe la investigación de este artículo que demuestra en C# un componente genérico de votación que se ejecuta en un intervalo especificado y utiliza un subproceso de fondo para realizar la acción de usuario especificada.

Ejemplo de uso:

IPoller poller = new UrlPoller(args[0], TimeSpan.FromSeconds(7)); 
IPolling pollingComponent = new Polling.Core.Polling(poller); 
pollingComponent.SubscribeForPollingUpdates(PollingAction); 
pollingComponent.Start(); 

Para el código y la muestra completa Ver:

http://www.avantprime.com/blog/24/an-example-of-repeating-code-using-a-worker-thread-without-using-timers-c