2012-07-24 12 views
5
string connectionstring = "server =SQLVS2\\SQLVS2;database=DDM;Persist Security Info=True;uid=ddmuser;password=User02+Ddm;"; 
    SqlConnection myConnection = new SqlConnection(connectionstring); 
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myConnection.Open(); 
    SqlDataReader rdr = myCommand.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     string filename = @"\\" + rdr.GetString(3); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(2)); 
     filename = System.IO.Path.Combine(filename, rdr.GetString(1)); 
     computeHashh1 abc = new computeHashh1(); 
     Console.WriteLine(abc.computeHash(filename));   
     inserthash insert = new inserthash(); 
     insert.InsertHash(rdr.GetString(1), abc.computeHash(filename), rdr.GetStr(2),rdr.GetString(3)); 

    } 

¿Cómo puedo hacer que este bucle se ejecute una vez cada 5 segundos para siempre o hasta que se detenga.¿Cómo puedo hacer un bucle infinito con pausas de 5 segundos?

Respuesta

12

El método más simple sería:

while (true) { 
    // code here 
    Thread.Sleep(5000); 
} 

Sin embargo, para mayor robustez, recomendaría un windows service con un proper timer.

+0

cómo escribir un temporizador adecuado en el servicio de Windows? estoy usando el servicio de Windows en esto, pero no tengo un temporizador – tipi

+0

Echa un vistazo al enlace que tengo en 'temporizador adecuado'. – mellamokb

+0

¿cómo puedes detenerlo? –

4

Probar:

while(true) 
{ 
    try 
    { 
     thread.sleep(5000) 
    } 
    catch(Exception e) 
    { 
     //handle the exception 
    } 
} 

Su más simples.

+0

Ahh golpeado – Nathaniel

+0

¿Por qué es mejor un temporizador? –

+0

Vea esto - tiene una buena explicación http://stackoverflow.com/questions/391621/compare-using-thread-sleep-and-timer-for-delayed-execution – Nathaniel

5

Me envolver su código y utilizar un objeto de temporizador que le permitirá tener un control sobre el propio temporizador (detener, iniciar, etc)

System.Timers.Timer aTimer; 
aTimer = new System.Timers.Timer(); 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
aTimer.Interval = 2000; 
aTimer.Enabled = true; 

private void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    //your code 
} 

más información en

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.100%29.aspx

+0

¿Por qué alguien necesitaría detener/iniciar un temporizador para un ciclo infinito? –

+0

OP: ¿cómo puedo hacer que este bucle se ejecute una vez cada 5 segundos para siempre o hasta que se detenga? –

+0

'5 segundos para siempre' - simple. 'o hasta que se detenga' - bastante fácil: Administrador de tareas/Servicios/Detener servicio. –

0

Bueno, si iba a hacer esto, y las restricciones en el intervalo no son precisas, y quería estar absolutamente seguro de que los eventos de temporizador múltiples nunca causarán que mi código vuelva a entrar si mi código ocasionalmente tomó más tiempo que el intervalo, Yo solo utilice un bucle sleep() y haga que la cosa funcione sin temporizadores externos que solo agreguen complejidad a lo que parece ser un requisito simple.

Fuera de un subproceso de GUI que debe procesar mensajes (o el hilo de servicio principal que debe procesar inicio/detención, etc.), los temporizadores son a menudo inapropiados, incómodos o si otro subproceso/grupo tiene que provocar el evento del temporizador, desperdicio de cambios de contexto.

No hay problema, en Vista/W7 de todos modos, con detener un servicio que ha engendrado hilos que están durmiendo. El sistema operativo tarda unos 20 segundos en darse cuenta de que, aunque el hilo principal del servicio haya manejado el mensaje de detención, el proceso de servicio todavía tiene hilos bloqueados; luego finaliza el proceso de servicio, matando cualquier hilo dormido/en ejecución/esperando/lo que sea .

Cuestiones relacionadas