C#:Thread.Sleep不工作

时间:2011-10-07 15:53:58

标签: c# multithreading forms audio

我有一些代码可以在一段时间内显示一个表单并播放声音。 但表格保持开放。

    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秒。

3 个答案:

答案 0 :(得分:5)

该行:

ic.ShowDialog();

使表单以模式方式显示,以便该方法阻止并阻止其他所有内容运行,直到表单关闭。

将该行更改为:

ic.Show();

这是非模态的,方法的其余部分将完成。

答案 1 :(得分:1)

ShowDialog()是模态的,在关闭对话框之前永远不会返回。你想要Show(),你也可能想要给自己发一个计时器信息而不是睡觉。

这里有一些示例代码:

http://www.codeproject.com/KB/cs/A_Custom_Message_Box.aspx

答案 2 :(得分:0)

当你调用showdialog()表单导致调用线程等待表单中的代码关闭窗口时,才会调用Sleep。使用表单中的代码关闭窗口,事情将更像您期望的工作。