2010-12-02 16 views
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時,圖像質量受到了不可接受的打擊。

+0

我不認爲你必須擔心幾個計時器徵稅的CPU。在他們觸發代碼之前,他們實際上並沒有做任何事情。 – 2010-12-02 02:17:30

回答

1

我認爲這是一個很好的方法。定時器給你很大的靈活性,就像Mike說的那樣,他們不會花任何CPU時間來說話。

相關問題