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秒

c#:线程.睡眠不工作

一行:

ic.ShowDialog();

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

将该行改为:

ic.Show();

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

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

下面是一些示例代码:

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

Sleep永远不会被调用,当您调用showdialog()时,窗体导致调用线程等待,直到窗体中的代码关闭窗口。在窗体中关闭带有代码的窗口,事情将更像您期望的那样工作。