/ / Спиране на цикъл с щракване на мишката или натискане на клавиша - c #, .net

Спиране на цикъл с щракване на мишката или натискане на клавиша - c #, .net

Разработвам приложение, в което играя азвук в контур. Искам цикълът да спре или с щракване на мишката или натискане на клавиш и да рестартира цикъла. Използвам c #, .net. Проблем, с който се сблъсквам е, че цикълът продължава да се изпълнява без да улавя вход от мишката / клавиатурата, докато достигне максималната си определена стойност. Моят код е

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

Отговори:

0 за отговор № 1

Трябва да използвате своя цикъл в друга нишка, отколкото UI Thread.

Използвал съм го CheckForIllegalCrossThreadCalls=false Тук само заради простотата. но ако не използвате това, ще се сблъскате с грешка, която показва, че искате да получите достъп до UI темата от друга нишка. която трябва да се обработва по по-добър начин, който се обсъжда тук

Но засега този примерен код отговаря на вашите нужди.

        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;
}
}
}
}