2011-10-07 6 views
0

일정 기간 동안 양식을 보여주고 소리를 내기위한 약간의 코드가 있습니다. 그러나 양식은 열려 있습니다.C# : Thread.Sleep Not working

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가있는 Form입니다. 닫히기 전에 1 초 동안 시간 초과가 필요합니다.

+2

ShowDialog를() 호출을 기다리고 있습니다. Tick ​​이벤트 핸들러가 Close() 메소드를 호출하는 Timer가 필요합니다. Application.Run()을 호출해야합니다. 이런 종류의 코드로 문제가 생기면 책을 읽어야합니다. –

답변

5

라인 : 그 방법은 블록과는 형태가 닫힐 때까지 실행에서 다른 모든 것을 방지 할 수 있도록

ic.ShowDialog(); 

는 모달 방식으로 표시하는 양식을하도록합니다. 에 라인

변경 :

ic.Show(); 

이 비 모달, 그리고 방법의 나머지 부분은 완료됩니다.

0

showdialog()을 호출 할 때 잠자기가 호출되지 않는 경우 폼의 코드가 창을 닫을 때까지 폼이 호출 스레드를 대기하게합니다. 양식의 코드로 창을 닫으면 예상대로 작동합니다.

1

ShowDialog()는 모달이며 대화 상자를 닫을 때까지 반환되지 않습니다. 당신은 Show()를 원하고 아마 sleeping 대신에 timer message를 자신에게 보내고 싶을 것이다. 여기

일부 샘플 코드 : 창을 닫 위해

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