那麼我做了一個基於Aforge的程序(這是一個視頻庫)。
該庫爲來自相機的下一個視頻幀創建自己的刷新事件。
到目前爲止,早些時候的人們已經幫助我使用多線程,所以這些Aforge線程可以向主程序線程報告,再次如此好,它工作的很好。如何正確退出多線程程序
特碼可以在這裏看到: how to do multithreading when using outside referenced code
但現在我經常注意到一個新的程序錯誤。
當我想退出程序時,問題就開始了。
目前Aforge線程可能仍然處於活動狀態。
它想回寫到已關閉的主窗體。
不知怎的,我需要在關閉程序之前停止另一個線程。
在Aforge有一個選項可以實現像停止相機,但它不夠。
但是,然後我的代碼仍然想寫在已經關閉的主窗體上。
有沒有辦法阻止所有線程,或者一些safeway從原始線程關閉? 我甚至在try catch結構中放置了主要程序的後臺報告,但它並不適用,在這些情況下停止它的唯一方法是在Visual Studio本身中按停止執行按鈕。
使用BeginInvoke而不是Invoke會更簡單(也可能更正確?)。你真的需要工作線程來等待UI來完成它做的任何更新嗎?使用BeginInvoke不會給你帶來孤立的Invoke調用,因爲它只是一個PostMessage調用,它的消息不會從消息隊列中刪除。 – Tergiver
...當然,BeginInvoke有一個不同的(潛在)問題:如果工作線程太快太快,BeginInvoke開始刪除調用(它有一定數量的最大隊列大小)。如果工作人員以突發方式工作,或者不會發出太多電話,這不是問題。如果它成爲一個,那麼你必須找到另一種方法來扼殺工人。 – Tergiver
因爲它有一個usb網絡攝像頭,它有自己的幀速率,所以不應該比我的計算速度更快。但它的全部仍然是測試版草稿,所以現在我的代碼比我的網絡攝像頭更快..但相機可能永遠不會比我的代碼更快,所以本質上我喜歡我的計算完成。 無論如何,我會開始閱讀關於BeginInvoke萬一我想念的東西。它有點困難的主題麪糰 – user613326