C sharp - ¿Como paro un bucle while en tiempo de ejecución?

 
Vista:

¿Como paro un bucle while en tiempo de ejecución?

Publicado por Zeusin (7 intervenciones) el 15/05/2006 10:12:18
Hola a todos, tengo un problemilla y espero q me podais ayudar y es que...

Tengo una aplicación q llegado un momento tiene que estar leyendo todo el rato, reciba o no reciba informacion, el caso es que esto lo hago con un while y es infinito pero claro le puse un boton para darle cuando quiera que pare de leer, pero una vez en ejecucion no puedo darle al boton para que me pare.

Supongo que esto ocurre porque esta todo el tiempo dentro del bucle y no acepta ningun evento ni nada mas, pero debe existir alguna manera para que mientras se ejecuta un proceso, yo pueda ejecutar otros controles en el formulario, independientemente de q este en un while infinito.

Si me he explicado mal, os pondre un ejemplo:

Imaginaos un antivirus, tu quieres escanear tu pc, y le das a empezar, y como tienes 140 gigas en cierto momento te agobias y dices paro, y le das al boton de cancelar y te para el escaner , pues metaforicamente hablando a mi me ejecuta el escaner pero no lo doy parado nunca, mas que nada pq no me deja pulsar el boton parar, no me ejecuta ningun evento.

Gracias por todo y espero que me podais ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Juan (19 intervenciones) el 15/05/2006 15:08:50
Y porque no mandas a dormir el hilo cada cierto tiempo con el fin de que no consuma tanto procesador y pueda accionar los eventos. Claro no es una excelente opcion, pero suena un poco viable. En Visual Basic hay una opcion Do Event que te captura los eventos que se han generado. Nose si uses Visual Studio .NET para poder usar elementos de Visual Basic en tu aplicacion de C#. Cualquier cosa comenta para ver
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Zeusin (7 intervenciones) el 15/05/2006 15:37:47
Pues ya lo hago lo que pasa q cuando lo mando dormir me blokea cualkier evento que intente hacer en el formulario, he probao con el evento click de un formulario y tb el del shortcut keys, etc...lo que ocurre es que tengo el formulario bloqueao, y no me deja tocar nada de el, entonces nose como lo puedo parar porque al estar bloqueado no me permite mandarle nada.

Y si, uso .NET y ando un poco desesperado asi q probare eso del do event, muchas gracias por contestar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Juan (19 intervenciones) el 15/05/2006 16:09:57
Usas el hilo principal o un hilo secundario? Me suena que si la ventana se bloquea es porque usas el hilo principal. Y porque no le quitas la propiedad de bloqueante al hilo, o le disminuyes su prioridad para que se puedan ejecutar los eventos del Frame
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Zeusin (7 intervenciones) el 15/05/2006 16:28:17
pues utilizo el hilo principal, mas q nada porque solo tengo un hilo, yo si kieres te paso parte del codigo pa que veas, y asi = me das indicao, es un programilla cutre q hice para ver si me daba salido, pero mas o menos funcionaria = en el otro proyecto, aqui te pego:

/*********CODIGO************/

public partial class Form1 : Form
{
public int activo=1;
public int label;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (button1.Enabled == true)
{
Prueba prueba = new Prueba();
Thread hilo = new Thread(new ThreadStart(prueba.Contar));
hilo.Start();
hilo.Join();
button1.Enabled=false;
}
}
public void inserccion()
{
MessageBox.Show(label.ToString());
}

private void button2_Click(object sender, EventArgs e)
{
activo = 0;
}

private void Form1_Load(object sender, EventArgs e)
{

}
}
public class Prueba
{
Form1 form = new Form1();
public void Contar()
{
int contador = 0;
while (contador<5)
{
if (form.activo == 1)
{
form.label = contador;
form.inserccion();
Thread.Sleep(5000);

}
else
{
MessageBox.Show("Salimos!!!");
break;
}
contador++;
}

}
}

Texplico mas o menos, en teoria tu le das al boton de empezar y te empiezan a salir messagebox cada 5 segundos, el caso es q en ese intervalo hay un boton parar al que no me deja darle y q me pararia la ejecucion.

Fuera de eso, nose como hacer.

Aasias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Juan (19 intervenciones) el 15/05/2006 17:05:33
Lo que te voy a decir no lo he probado pero me voy a remitir literalmente a la teoria. Si tienes un proceso y lo mandas a dormir, otro proceso se debe apoderar del cpu. Por ende si tu hilo del metodo se va a dormir, el hilo principal podria tomar el cpu y ejecutar eventos. Pero si tienes el mismo hilo, cuando se va a dormir se va a dormir todo, eso podria ser la razon por la cual no captura los eventos.
Mi recomendacion, que definas un atributo de hilo en tu clase, en el load del frame lo instancies, y manten separados el hilo principal del de tu metodo, para que cuando uno se duerma el otro entre en accion. No estoy seguro si para definir un hilo propio tienes que hacer una nueva clase y definir una interfaz. Prueba a ver y me dices que ha pasado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Zeusin (7 intervenciones) el 16/05/2006 10:50:55
Muchas gracias era muy parecido a la idea q tu dabas pero sobre todo me ilustro eso que dijiste de q como solo tenia un hilo y lo mandaba dormir pues ahi me di cuenta, asias por todo.

Un Saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Juan (19 intervenciones) el 16/05/2006 16:59:47
A la orden, esa es la idea de estos foros.
Juan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como paro un bucle while en tiempo de ejecució

Publicado por Blackwolf67 (3 intervenciones) el 29/03/2018 19:39:13
Amigo, he intentado hacer eso que el anterior comentario mencionaba, pero sigue apareciendo lo mismo. Podrias compartir tu solucion? gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar