我正在使用c#與網絡攝像頭集成。我需要每x毫秒生成一個快照圖像並將其保存到文件中。 我已經有代碼啓動並運行以保存到按鈕單擊事件上的文件,但是我不知道在後臺拍攝快照時我應該怎麼做 - 這是多線程嗎?我真的不確定。 我可以阻止UI線程,把Thread.Sleep,然後拿走快照,但我不知道這是否正確。 我想過使用後臺工作,但我現在遇到與SendMessage交叉線程困難...所以我不知道我是否應該去打擾多線程或只是阻止用戶界面。每x毫秒創建一個從網絡攝像頭的圖像
幫助非常有用,在此先感謝。
我正在使用c#與網絡攝像頭集成。我需要每x毫秒生成一個快照圖像並將其保存到文件中。 我已經有代碼啓動並運行以保存到按鈕單擊事件上的文件,但是我不知道在後臺拍攝快照時我應該怎麼做 - 這是多線程嗎?我真的不確定。 我可以阻止UI線程,把Thread.Sleep,然後拿走快照,但我不知道這是否正確。 我想過使用後臺工作,但我現在遇到與SendMessage交叉線程困難...所以我不知道我是否應該去打擾多線程或只是阻止用戶界面。每x毫秒創建一個從網絡攝像頭的圖像
幫助非常有用,在此先感謝。
相機可以更新其像素緩衝區的速度有一個物理硬件限制。網絡攝像機遠遠不能超過30fps。獲得實際的圖像應該是或多或少瞬時的(除非在很高的分辨率下),所以你不需要線程開始。當我前一陣子做了我所使用的方法上
也許this將有所幫助。
給出我想你應該把這個任務在一個單獨的線程。在某些情況下,創建和保存圖像的過程可能需要更長時間,並且此時HMI可能會凍結。爲了避免這種情況,請將此任務放在單獨的線程上
您可以創建一個計時器來每n毫秒觸發一個委託,並且該委託可以將工作線程排隊以執行您的OnClick()處理程序已經執行的操作。
我不會把它寫成一個單線程的應用程序,因爲根據用戶攝像頭的性能,你可能很容易在永久循環中處理計時器事件,導致你的主UI線程被永久阻塞。
ThreadQueue.QueueUserWorkitem((args) =>
{
// Blah ...
}
應該不需要太多努力才能正常工作。
我看到它不是多線程的。所以我認爲我不應該打擾,只是把它留下(因爲它不是多線程)? – Rita 2010-05-23 01:34:41