2011-10-07 91 views
0

我有一点代码是为了显示一段时间的窗体并播放声音。 但是表格保持打开状态。C#:Thread.Sleep不工作

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的PictureBox的窗体。 我需要它在关闭之前超时1秒。

+2

ShowDialog的()调用正等着你关闭该窗口。您需要一个Timer事件处理程序调用Close()方法的Timer。这需要调用Application.Run()。这种代码会遇到麻烦,你需要阅读一本书。 –

回答

5

行:

ic.ShowDialog(); 

导致窗体的模态的方式来展示,所以该方法块,并防止一切从运行,直到窗体关闭别的。

更改该行:

ic.Show(); 

这是无模式,并且该方法的其余部分将完成。

0

当您调用showdialog()时,睡眠永远不会被调用,窗体会导致调用线程等待窗体中的代码关闭窗口。关闭你的窗体中的代码窗口,事情会更符合你的期望。