c#:线程.睡眠不工作
本文关键字:工作 线程 | 更新日期: 2023-09-27 18:10:52
我有一点代码,这意味着显示一段时间的形式和播放声音。然而,表单保持打开状态。
static void Main(string[] args)
{
SoundPlayer sp = new SoundPlayer();
ShowImage(@"Resources'Fish.png", "Fish", 256, 256, 1000);
sp.SoundLocation = @"Resources'fish.wav";
sp.Play();
}
public static void ShowImage(string img, string title, int width, int height, int timeout)
{
ImageContainer ic = new ImageContainer();
ic.imgView.Image = Image.FromFile(img);
ic.Text = title;
ic.Size = ic.imgView.Image.Size;
ic.Height = height;
ic.Width = width;
ic.ShowDialog();
Thread.Sleep(timeout);
ic.Hide();
ic.Opacity = 0;
ic.Dispose();
}
它只是保持打开的形式,而不是关闭或隐藏。ImageContainer是一个表单,里面有一个名为imgView的图片盒。我需要它在关闭前暂停1秒
一行:
ic.ShowDialog();
使表单以模态方式显示,因此该方法阻塞并阻止其他所有内容运行,直到表单关闭。
将该行改为:
ic.Show();
这是非模态的,方法的其余部分将完成
ShowDialog()是模态的,在关闭对话框之前永远不会返回。你想要Show(),你也可能想给自己发送一个计时器消息,而不是睡觉。
下面是一些示例代码:
http://www.codeproject.com/KB/cs/A_Custom_Message_Box.aspxSleep永远不会被调用,当您调用showdialog()
时,窗体导致调用线程等待,直到窗体中的代码关闭窗口。在窗体中关闭带有代码的窗口,事情将更像您期望的那样工作。