非常簡單的 C# Winforms 應用程式、OpenCVSharp4、Thread.Sleep() 不起作用。似乎(我猜)Cv2 不能在多個執行緒中使用,例如,一個執行緒創建 NamedWindow,另一個執行緒創建 ImShow。但是下面這個簡單的代碼仍然令人困惑。
private void button1_Click(object sender, EventArgs e)
{
VideoCapture video = new VideoCapture("E:/RankingBack.mp4");
Mat frame = new Mat();
while (true)
{
video.Read(frame);
Cv2.ImShow(" ", frame);
//Cv2.WaitKey(33); // WORKS
Thread.Sleep(33); // DOES NOT WORK
}
frame.Dispose();
video.Release();
Cv2.DestroyAllWindows();
}
uj5u.com熱心網友回復:
waitKey的目的不是等待,而是旋轉OpenCV 使用的 GUI 事件回圈。如果你不呼叫它,OpenCV 的 GUI 就不起作用。
您已經在使用 C# 和 WinForms(根據標簽判斷),因此您應該使用 WinForms 而不是imshow. OpenCV 進行自己的 GUI 事件處理,這可能與在同一程式中使用的其他 GUI 工具包發生沖突。
OpenCV 的 GUI 函式通常不能安全地從執行緒呼叫,因為某些 GUI 后端不允許這樣做。不過這無關緊要,因為...
您在這里沒有“執行緒”。您有按鈕單擊事件的處理程式。這是由 WinForms 應用程式的事件回圈執行的。這發生在每個行程中始終存在的主執行緒中。那不是一個衍生的執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496629.html
標籤:C# 多线程 表格 opencv opencvsharp
