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 回答