播放声音文件后启动计时器,避免锁定GUI

本文关键字:锁定 GUI 计时器 文件 启动 播放声音 | 更新日期: 2023-09-27 18:34:15

我正在尝试制作一个 GUI,它在单击按钮后首先播放声音文件,播放后,它会启动一个计时器。

现在,我发现获得此行为的最简单方法是在GUI中同步播放声音文件。这样,GUI 就会"阻止",并且仅在声音文件播放完毕后启动计时器。

问题是这样的:

我没想到声音文件会这么长,但有些文件很长,导致 GUI 显示"程序没有响应"。

现在,我可以做些什么才能在播放声音但不锁定 GUI 后仍然启动计时器?

我正在考虑使用任务,但检查任务是否完成仍然可能会锁定 GUI。

我能做些什么来完成这项工作?

更新:

此代码在另一个线程中运行,要在 GUI 中启动计时器,使用以下代码(使用此处找到的 Marc Gravell 提供的解决方案)

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

播放声音文件后启动计时器,避免锁定GUI

使用线程的非常简单的任务。下面是如何完成此操作的示例:

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

使用线程。 按下按钮时,在线程中启动计时器。 此线程应停止声音。 线程不会阻止您的 UI 或使其没有响应。