Thread.Sleep在Windows窗体C#中没有按预期工作

时间:2013-07-01 18:32:41

标签: c# multithreading winforms sleep

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

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

当我第一次启动我的应用程序时,一切顺利,但是当计时器运行TICK事件时再次携带DataGridView中的信息并运行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错了。

有人可以帮助我吗?

谢谢......!

1 个答案:

答案 0 :(得分: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();