1
VB.NET,.NET 4VB.NET使用計時器來增加幀的動畫圖像類 - 這是一個好方法嗎?
你好,
我寫一個工業控制前端有一些「花哨」的圖形來表示一些機器的狀態。例如,我通過顯示加熱器照片中顯示的紅色波浪箭頭指示某些加熱器開啓。我通過創建從PictureBox的繼承的類,並使用計時器以超前的圖像來實現這一點:
Public Class AnimatedPictureBox
Inherits PictureBox
Private WithEvents Timer As New Timers.Timer
Public Property Interval As Double
Get
Return Timer.Interval
End Get
Set(ByVal value As Double)
Timer.Interval = value
End Set
End Property
Public ImageList As New List(Of Image)
Private NextImageIndex As Integer = 0
Public Sub New(ByVal Interval As Integer)
MyBase.New()
Timer = New Timers.Timer
Me.Interval = Interval
Me.SizeMode = PictureBoxSizeMode.StretchImage
Me.Visible = True
End Sub
Public Sub New()
Me.New(100)
End Sub
Public Sub BeginAnimation(ByVal [Loop] As Boolean)
Timer.Start()
End Sub
Public Sub BeginAnimation()
BeginAnimation([Loop]:=True)
End Sub
Public Sub StopAnimation()
Timer.Stop()
End Sub
Private Sub Timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer.Elapsed
InvokeControl(Me, _
Sub(x)
x.Image = x.ImageList(NextImageIndex)
x.NextImageIndex += 1
If x.NextImageIndex > x.ImageList.Count - 1 Then x.NextImageIndex = 0
End Sub)
End Sub
End Class
凡InvokeControl是一個模塊中的子程序,處理的控制跨線程編組:
Private Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
If Control.InvokeRequired Then
Try
Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
Catch ex As Exception
'..Handle the error..
End Try
Else
Action(Control)
End If
End Sub
我的問題是「這是一個好方法去做這件事還是有一些明顯的更好的方法嗎?」我不太擅長編程,並擔心有幾個嵌入式定時器會對CPU造成負擔。任何建議將不勝感激!
由於提前, 布賴恩
附:我使用GIF動畫製作了一些其他的動畫素材,但在這裏,我希望能夠處理能夠處理比GIF更大的調色板的圖像格式(如果有意義的話)。換句話說,當我試圖將一些動畫保存爲GIF時,圖像質量受到了不可接受的打擊。
我不認爲你必須擔心幾個計時器徵稅的CPU。在他們觸發代碼之前,他們實際上並沒有做任何事情。 – 2010-12-02 02:17:30