在 .NET 的 PictureBox 當中,我們會用 OnPaint 與 Invalidate 繪製圖形,但是會有一些效能上的問題需要注意,如下
PictureBox 的 OnPaint 與 Invalidate
在 .NET 當中,有一種習慣的寫法是把繪製PictureBox當中圖形的所有程式碼寫在Paint所引發的函式當中,當我們需要重新繪製圖形的時候,就呼叫PictureBox.Invalidate就可以讓這張圖片失效,進而重新繪製。
若用以上的方法,如果你把PictureBox.Invalidate寫在Paint的Function當中,就會引發無限迴圈,一直重新繪製,如此一來會佔用掉非常多的CPU時間,並且讓程式執行的很不順。所以一般當然不會這樣做。可是今天我犯了一個錯誤,我把PictureBox.Image = img寫在Paint當中了,如此的程式碼也會引起無限迴圈。如果你有遇到CPU Loading飆升的問題,可以檢查一下是不是這個原因。
在Paint函式當中,只能夠使用e.Graphics所引用的方法,來幫你的PictureBox繪製圖片。如果是要把現成的img放進去,就得用g.DrawImage(img,new Point(0,0)這樣的寫法,就不會有問題了。
年輕人...不要和老人家搶沙發啦~ XD
還好他不是和我搶....
cdfu提到:
還好他不是和我搶....
舉手...我來