none
Habilitar X para poder salir de la aplicación en cualquier momento, independientemente de lo que se este ejecutando RRS feed

  • Pregunta

  • Hola, buenas tardes

    Estoy trabajando en una aplicacion para windows form, con el lenguaje c#

    Tengo diferentes botones que ejecutan bucles for, y otras tantas funcionalidades.

    El problema que tengo es que mientras una de estas funcionalidades se estan llevando a cabo no puedo pulsar el boton X del programa hasta que no finalice la tarea.

    Y lo que me gustaría hacer es dejarlo habilitado para que se pueda pulsar en cualquier momento.

    Un saludo, muchas gracias

    martes, 29 de julio de 2014 12:01

Todas las respuestas

  • El problema es que la interfaz de usuario en Windows Forms es mono-hilo, y mientras está ocupada no responde a nada más. Así que lo que tienes que hacer es modificar todos esos botones que ejecutan bucles para que "cedan" el control y la interfaz pueda responder al click en la X.

    Si la duración de cada iteración de los bucles es breve, una solución es meter una llamada a Application.DoEvents() dentro del bucle.

    Si con eso no basta para que responda suficientemente rápido al evento de cierre, entonces la solución consiste en lanzar en otro hilo los cálculos de los botones. Se puede hacer (entre otras formas) con un control BackgroundWorker, o con System.Threading.Thread. En cualquiera de los casos, tendrás que estudiar con cierto detenimiento cómo se hace, porque no está permitido que desde otro hilo se modifique la interfaz de usuario, y en consecuencia hay que meter código para trasladar la ejecución al hilo principal cuando el hilo secundario necesite presentar algo.

    martes, 29 de julio de 2014 12:39
  • Buenas,

    Para conseguir lo que necesitas deberás ejecutar los procesos en otro hilo de ejecución, de forma que te permita tener ejecuciones en paralelo, pudiendo de esta forma cerrar la ventana cuando creas neceario.

    Un ejemplo: Cancel a process while it is running in C#


    Si se solucionó tu consulta, no olvides marcarla como respondida. Si te ayudó, vótala como útil.

    martes, 29 de julio de 2014 12:47
  • Muchas gracias por la respuesta, voy a indagar un poco sobre lo que me has dicho de Application.DoEvents()

    antes de meterme a manjar mas hilos de ejecucion.

    miércoles, 30 de julio de 2014 10:00