2013-11-23 99 views
0

我正在爲我的相機制作一個程序來拍照並將它們保存在隱藏圖像中供以後使用,相機在開始時工作正常,但使用代碼時:WebCamera(Image Box)當使用Thread.Sleep時凍結

private void mainWinForm_PreviewKeyDown_1(object sender, PreviewKeyDownEventArgs e) 
    { 

     if (e.KeyCode == Keys.Space) 
     { 
      //1st Photo 
      label1.Text = "3 (Get ready!)"; 
      label1.Refresh(); 
      Thread.Sleep(1500); 

      label1.Text = "2 (To smile! :))"; 
      label1.Refresh(); 
      Thread.Sleep(1500); 

      label1.Text = "1 (Cheeese!)"; 
      label1.Refresh(); 
      Thread.Sleep(1500); 

      label1.Text = "Taken!"; 
      label1.Refresh(); 
      Thread.Sleep(1500); 
      imgCapture.Image = imgVideo.Image; 

imgVideo.Image會凍結,我該如何使這項工作?

+1

thread.sleep一般來說是不好的做法。你不應該需要這樣做。正如你所知,它將線程的整個工作狀態設置爲睡眠狀態,因此可以在其他地方產生影響。你怎麼知道imgVideo.Image會凍結?所有你正在做的是分配對象到另一個對象。你用什麼來表示imgVideo對象?這是從哪裏來的? –

+0

我還可以如何讓它倒計時和拍照? – user3018952

+0

非常簡單 - 在最終禁用定時器之前,使用定時器和計數器來查看它執行了多少次。 –

回答

3

你不應該在UI線程中使用Thread.Sleep,因爲它會讓主線程睡眠和UI無響應。使用計時器。在.net中定時器的優秀比較是Here。您的任務需要System.Windows.Forms.Timer,因爲它也在UI線程中執行,您不會遇到設置屬性和調用控件方法的問題。