我有一个应用程序使用计时器在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错了。
有人可以帮助我吗? 谢谢......!答案 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();