我有一些代码可以在一段时间内显示一个表单并播放声音。 但表格保持开放。
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是一个带有PictureBox的窗体,名为imgView。 我需要它在关闭之前超时1秒。
答案 0 :(得分:5)
该行:
ic.ShowDialog();
使表单以模式方式显示,以便该方法阻止并阻止其他所有内容运行,直到表单关闭。
将该行更改为:
ic.Show();
这是非模态的,方法的其余部分将完成。
答案 1 :(得分:1)
ShowDialog()是模态的,在关闭对话框之前永远不会返回。你想要Show(),你也可能想要给自己发一个计时器信息而不是睡觉。
这里有一些示例代码:
答案 2 :(得分:0)
当你调用showdialog()
表单导致调用线程等待表单中的代码关闭窗口时,才会调用Sleep。使用表单中的代码关闭窗口,事情将更像您期望的工作。