0

ボタンをクリックした後、最初にサウンドファイルを再生し、再生後にタイマーを開始する GUI を作成しようとしています。

この動作を実現する最も簡単な方法は、GUI 内でサウンド ファイルを同期的に再生することです。このように、GUI は「ブロック」し、サウンド ファイルの再生が終了した後にのみタイマーを開始します。

問題は次のとおりです。

サウンド ファイルがこれほど長いとは予想していませんでしたが、一部のファイルは非常に長く、GUI に「プログラムが応答していません」と表示されます。

GUIをロックせずにサウンドを再生した後もタイマーを開始するにはどうすればよいですか?

タスクを使用することを考えていましたが、タスクが完了したかどうかを確認すると、おそらく GUI がロックされます。

これを機能させるにはどうすればよいですか?

更新

このコードは別のスレッドで実行され、GUI でタイマーを開始するには、次のコードが使用されます (ここにある Marc Gravell が提供するソリューションを使用)

        //start timer after playing sound source:
        this.Invoke((MethodInvoker)delegate
        {
            if (!timer.Enabled)
                timer.Start();
        });
4

2 に答える 2

1

スレッドを使用した非常に単純なタスクです。これを達成する方法の例を次に示します。

private void button1_Click(object sender, EventArgs e)
    {
        new System.Threading.Thread(testMethod).Start(); //starting a new thread
    }

    public void testMethod() //method will play sound and start timer after that
    {
        System.Media.SoundPlayer sp = new System.Media.SoundPlayer(filepath);
        sp.Play();
        timer1.Start();
    }
于 2013-10-05T20:12:37.433 に答える
0

スレッドを使用します。ボタンが押されると、スレッドでタイマーが開始されます。このスレッドは音を止めるはずです。スレッドが UI をブロックしたり、応答しなくなったりすることはありません。

于 2013-10-05T19:51:22.930 に答える