/ / Detener el bucle con el clic del mouse o la pulsación de tecla

Detener el bucle con el clic del mouse o la pulsación de tecla - c #, .net

Estoy desarrollando una aplicación en la que juego unSonido en un bucle. Quiero que el ciclo se detenga al hacer clic con el mouse o al presionar una tecla y reiniciar el ciclo. Estoy usando c #, .net. El problema al que me enfrento es que el bucle continúa ejecutándose sin capturar la entrada del mouse / teclado hasta que alcanza su valor máximo especificado. Mi código es

for(soundVolume = 0; soundVolume < 10; soundVolume++)
{
sound.Play();
if(mouseClick == true)
{
soundVolume = 0;
}
}

Respuestas

0 para la respuesta № 1

Debe usar su bucle en otro subproceso que no sea el subproceso de interfaz de usuario.

He usado CheckForIllegalCrossThreadCalls=false Aquí solo por simplicidad. pero si no lo usa, se enfrentará a un error que muestra que desea acceder al subproceso de la interfaz de usuario desde otro subproceso, que debe manejarse de una mejor manera que se discute aquí

Pero por ahora, este código de muestra satisface su necesidad.

        bool mouseClick =false;
private void Form1_Load(object sender, EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;
}

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
mouseClick = true;
}

private void button1_Click(object sender, EventArgs e)
{
var x=new Action(doit).BeginInvoke(null,null); //Do something in other thread that UI Thread
}

private void doit()
{
for(soundVolume = 0; soundVolume < 10; soundVolume++)
{
sound.Play();
if(mouseClick == true)
{
soundVolume = 0;
}
}
}
}