0

我有一个应用程序,它使用计时器在 1 分钟内执行刷新 DataGridView 中的数据。根据返回屏幕的信息,将播放不同的声音。每个声音都有一个播放时间。我正在使用这个命令来影响我的音乐的持续时间。

Thread.sleep(GetMusicDuration[i] * 1000);

当我第一次启动我的应用程序时,一切顺利,但是当计时器再次运行携带 DataGridView 中的信息的 TICK 事件并运行 PLAY 播放声音时,我的 Thread.Sleep 命令不起作用,它根本忽略不期望参数的时间设置。

public void PlaySound()
    {
        try
        {
            while (1 == 1)
            {
                List<string> distinctMusic = GetMusicFile.Distinct().ToList();
                StopSound();
                if (distinctMusic.Count > 0)
                {
                    for (int i = 0; i < distinctMusic.Count; i++)
                    {
                        player.SoundLocation = distinctMusic[i];
                        player.Play();
                        Thread.Sleep(GetMusicDuration[i] * 1000);
                        StopSound();
                    }
                }

                DisposePlayer();
            }
        }
        catch (Exception e)
        {
            if (generateLog)
                log.LogTxt(e.ToString());
        }
    }

直到现在我才明白为什么 exucução 错了。

有人可以帮助我吗?

谢谢你...!

4

1 回答 1

0

Thread.Sleep 阻塞 UI 线程。您应该改用计时器:

//Create a new timer that ticks every xms
var t = new System.Timers.Timer (GetMusicDuration[i] * 1000);

//When a tick is elapsed
t.Elapsed+=(object sender, System.Timers.ElapsedEventArgs e) => 
{
   //what ever you want to do
};
//Start the timer
t.Start();
于 2013-07-01T20:20:42.520 回答