Foros del Web » Programación para mayores de 30 ;) » .NET »

Evento de teclado en C# que pare la ejecución de una función

Estas en el tema de Evento de teclado en C# que pare la ejecución de una función en el foro de .NET en Foros del Web. Buenas, tengo una aplicación implementada en C# que permite crear una lista de archivos de excel, introducir una o diversa palabras a buscar, y entonces ...
  #1 (permalink)  
Antiguo 13/01/2010, 09:34
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Evento de teclado en C# que pare la ejecución de una función

Buenas,

tengo una aplicación implementada en C# que permite crear una lista de archivos de excel, introducir una o diversa palabras a buscar, y entonces buscará para cada archivo de excel si están o no esas palabras y muestra el resultado en otra lista. El volumen de archivos que acostumbra a consultar ronda los 20 mil por lo que cada búsqueda tarda un buen rato. Además, almacena las búsquedas de tal manera que puede crear un archivo de texto con el resultado de cada una de ellas.

Por este motivo, es necesario que se pueda cancelar una búsqueda, para que si el usuario se equivoca en la palabra o en los archivos, no tenga que esperar a que termine, o no cierre el programa y pierda las búsquedas anteriores.

Cuando el programa está buscando no permite tocar ningún botón del formularo ni interactuar con él, por lo que necesitaría saber como puedo hacerlo (mediante pulsando la tecla Esc por ejemplo) para que al pulsar una tecla emita un evento (lo que seria un signal en qt sino me equivoco) para que pare la búsqueda (pero que no cierre el programa).

Espero haberme explicado correctamente.

Gracias de antemano.
  #2 (permalink)  
Antiguo 13/01/2010, 09:50
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Cita:
Iniciado por negu Ver Mensaje
Cuando el programa está buscando no permite tocar ningún botón del formularo ni interactuar con él, por lo que necesitaría saber como puedo hacerlo (mediante pulsando la tecla Esc por ejemplo) para que al pulsar una tecla emita un evento (lo que seria un signal en qt sino me equivoco) para que pare la búsqueda (pero que no cierre el programa).
Te has explicado muy claramente no te preocupes :)

El motivo de porque te pasa esto es porque tu aplicación se ejecuta en un solo hilo (thread).

Cuando estas procesando esos ficheros, ese hilo está tan tan ocupado que no puede responder a la parte gráfica (botones del Form). La solución consiste en crear un hilo (thread) adicional que ejecute el trabajo. De esta manera tendrás uno que se dedicará en exclusiva a la parte gráfica (Form) y otro que hará el trabajo sucio. Además, desde el primero puedes parar el segundo sin muchos problemas.

Te recomiendo que leas esto:

http://msdn.microsoft.com/en-us/libr...8VS.95%29.aspx
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 13/01/2010, 10:08
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Tiene bastante lógica eso que dices.

Voy a probarlo.

Muchas gracias.
  #4 (permalink)  
Antiguo 13/01/2010, 10:25
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Acabo de hacer una prueba rápida.. es posible que no pueda acceder a los objetos del proceso principal desde este nuevo thread?
  #5 (permalink)  
Antiguo 13/01/2010, 10:33
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Evento de teclado en C# que pare la ejecución de una función

No es recomendable hacerlo por posibles errores (varios hilos accediendo para modificar una misma variable, por ejemplo). Lo ideal es que pases la variable a la función del thread.

Te dejo un tutorial en castellano que quizás te sea de más utilidad:

http://foro.elhacker.net/net/tutoria...tml;msg1367009
__________________
Aviso: No se resuelven dudas por MP!
  #6 (permalink)  
Antiguo 13/01/2010, 10:59
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Debo acceder (y modificar) desde este nuevo thread a dos listbox y un label del formulario principal. Supongo que podría bloquearlos (algo parecido al lock y unlock en las bases de datos o al c) para controlar la concurrencia y tatar de alguna manera esos datos.

Por lo que he leído es posible ¿Verdad?

A ver si encuentro algo..

Gracias.
  #7 (permalink)  
Antiguo 13/01/2010, 11:04
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Has de usar una función intermedia, esto te acabará de solucionar tu problema:

http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx
__________________
Aviso: No se resuelven dudas por MP!
  #8 (permalink)  
Antiguo 13/01/2010, 17:06
 
Fecha de Ingreso: diciembre-2009
Mensajes: 52
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Evento de teclado en C# que pare la ejecución de una función

Antes he olvidado contestarte.

Ya lo he logrado tal y como me recomendaste.

Muchísimas gracias!

Etiquetas: teclado, eventos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:34.