none
setTimeout y clearTimeout en c# RRS feed

  • Pregunta

  • Hola compañeros...

    ¿Existe una solución / idea / estrategia simple para crear una función equivalente a setTimeout y clearTimeout en una aplicación de WinForms C#

    Básicamente, tengo un cuadro de texto(TexBox), y después de cada pulsación de tecla(KeyDown) quiero ejecutar una tarea para rellenar una lista (consulta a BD) pero quiero poder cancelar (por ejemplo, clearTimeout) si el usuario sigue ingresando caracteres ... y asi evitar que me ejecute la consulta por cada pulsación

    Ejemplo en JavaScript 

    -(Esto se ejecuta después de cada pulsación de tecla)

       typingTimer = false;
    
       searchTrigger = function searchTrigger(e) {
    	if (typingTimer) {
            	clearTimeout(typingTimer);
    	}
    
    	typingTimer = setTimeout(function () {
    	         //Ejecuta accion
            }, 300);
       };
    
    
    

    miércoles, 10 de julio de 2019 17:51

Todas las respuestas

  • setTimeOut(delegate(object s, EventArgs args) { c# stuff; c# stuff; c# stuff;}, 2000); 
    
     
    
    public void setTimeOut(EventHandler doWork , int time)
    
    {
    System.Windows.Threading.DispatcherTimer myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    
    myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, time);myDispatcherTimer.Tick += delegate(object s, EventArgs args) { myDispatcherTimer.Stop(); };
    myDispatcherTimer.Tick += doWork;
    
    myDispatcherTimer.Start();
    
    }

    Hola  Abner Aaron

    Dando seguimiento a tu pregunta, te comparto un ejemplo de código que puede serte útil  con lo referente a lo que nos estás preguntando.

     

     

    Espero que te sean de utilidad.

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 11 de julio de 2019 15:25
    Moderador
  • hola

    No evaluaste aplicar la consulta ante una determinada tecla como ser el ENTER

    entonces dejas que escriba y cuando termina presiona enter y ejecutas la accion, asi no necesitas un timer

    puedes usar el evento KeyPress para detectar la presion del enter estando con el foco en el textbox

    creo que es una opcion igual de eficiente y mucho mas simple de implementar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de julio de 2019 16:12
  • Hola... Pablo Rubio.

    Gracias por el fragmento de código funciona muy bien, ya había codificado algo parecido con Timers el problema que tengo ahora es que tanto lo que tenia echo como el fragmento que me proporcionaste me crea hilos, es decir que por cada pulsación de tecla se ejecuta la acción lo que necesito ahora es algo como "clearTimeout" ( JavaScript ) que me reinicie los timer o setTimeOut si el usuario sigue ingresando caracteres. ¿tendras alguna idea de como solucionarlo?, te lo agradecería compañero.

    Abner Cocom



    • Editado Abner Aaron martes, 16 de julio de 2019 14:01
    martes, 16 de julio de 2019 13:36
  • Hola...  Leandro Tuttini

    Gracias por tu sugerencia, tal y como lo planteas tenia mi código anterior. Sor programador web y la función de JavaScript lo utilizo en todas mis consultas es algo muy eficaz y practico para el usuario, ahora estoy en un proyecto con winForms C# y me dio curiosidad agregar esa funcionalidad a mi proyecto ya que considero que seria mucho mas fácil para el usuario.

    Abner Cocom




    • Editado Abner Aaron martes, 16 de julio de 2019 14:01
    martes, 16 de julio de 2019 13:52