2010-05-23 49 views
2

我正在使用c#與網絡攝像頭集成。我需要每x毫秒生成一個快照圖像並將其保存到文件中。 我已經有代碼啓動並運行以保存到按鈕單擊事件上的文件,但是我不知道在後臺拍攝快照時我應該怎麼做 - 這是多線程嗎?我真的不確定。 我可以阻止UI線程,把Thread.Sleep,然後拿走快照,但我不知道這是否正確。 我想過使用後臺工作,但我現在遇到與SendMessage交叉線程困難...所以我不知道我是否應該去打擾多線程或只是阻止用戶界面。每x毫秒創建一個從網絡攝像頭的圖像

幫助非常有用,在此先感謝。

回答

1

相機可以更新其像素緩衝區的速度有一個物理硬件限制。網絡攝像機遠遠不能超過30fps。獲得實際的圖像應該是或多或少瞬時的(除非在很高的分辨率下),所以你不需要線程開始。當我前一陣子做了我所使用的方法上

http://weblogs.asp.net/nleghari/pages/webcam.aspx

0

也許this將有所幫助。

+0

我看到它不是多線程的。所以我認爲我不應該打擾,只是把它留下(因爲它不是多線程)? – Rita 2010-05-23 01:34:41

0

給出我想你應該把這個任務在一個單獨的線程。在某些情況下,創建和保存圖像的過程可能需要更長時間,並且此時HMI可能會凍結。爲了避免這種情況,請將此任務放在單獨的線程上

0

您可以創建一個計時器來每n毫秒觸發一個委託,並且該委託可以將工作線程排隊以執行您的OnClick()處理程序已經執行的操作。

我不會把它寫成一個單線程的應用程序,因爲根據用戶攝像頭的性能,你可能很容易在永久循環中處理計時器事件,導致你的主UI線程被永久阻塞。

ThreadQueue.QueueUserWorkitem((args) => 
{ 
    // Blah ... 
} 

應該不需要太多努力才能正常工作。