我目前正在使用Windows.Forms應用程序。這基本上是一個簡單的運動檢測問題。從單獨的線程在窗體上繪製圖像
我有一個表格上的按鈕時,在按下時啓動一個背景工人其執行以下操作:
- 從磁盤
- 抓取的圖像創建一個新的位圖,可以用作緩衝器。
- 執行運動檢測
- 從運動檢測的結果,更新該緩衝液(使用緩衝器的繪圖表面)
- 火災進展更改事件與由所述緩衝器的克隆的自變量,基本上
(sender as BackgroundWorker).ReportProgress((Bitmap)buffer.Clone())
在進度改變的事件中,我畫了緩衝區。
if (!PnlImage.IsDisposed)
PnlImage.CreateGraphics().DrawImageUnscaled(buffer, 0, 0);
我不禁想知道這是否是在屏幕上繪製更新圖像的最佳方式。任何人都可以提出我可以做的改進嗎? 謝謝。
編輯: 我已經更新程序使用.NET Framework 4,我們不再使用BackgroundWorker。相反,我們現在使用System.Threading.Tasks命名空間,並使用Invoke從任務內更新背景圖像。
感謝所有回覆。
克隆緩衝區的原因是什麼? – ironic 2010-01-09 23:27:26
您不能跨線程訪問它,因爲每個步驟都會創建並銷燬新的緩衝區。我試着製作一個通用緩衝區,並使用鎖來訪問它,但它並沒有證明太成功。 – 2010-01-10 00:09:37