UIスレッドとは別のスレッドでループを使用する必要があります。
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;
}
}
}
}