-1

ループでサウンドを再生するアプリケーションを開発しています。マウスのクリックまたはキーの押下でループを停止し、ループを再開したい。私はc#、.netを使用しています。私が直面している問題は、指定された最大値に達するまで、マウス/キーボードからの入力をキャプチャせずにループが実行され続けることです。私のコードは

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

1 に答える 1

0

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;
              }
            }
        }
    }
于 2013-07-14T04:52:37.890 に答える