在VB Net中每秒更新文本块的文本

时间:2013-03-15 11:06:53

标签: vb.net audio timer irrklang

我有一个Sub,它在我创建新窗口时处理。它使用Irrklang库加载并播放mp3文件。但是如何更新playposition。我听说我可以使用计时器,但如何在子程序中使用它?

Private Sub  MainWindow_Loaded(sender As Object, e As RoutedEventArgs)

    Dim Music = MyiSoundengine.Play2D("Music/001.mp3")

    I Want to update this in every sec!
    Dim Music_Playposition = Music.Playpostion

    End Sub

1 个答案:

答案 0 :(得分:0)

您不能在方法/子内部使用计时器。计时器工作的唯一方法是定期提高事件;在计时器的情况下,它被称为“Tick”事件,每当计时器“滴答”时就会引发。

您可能已经知道哪些事件 - 您的MainWindow_Loaded方法处理的是Loaded类的MainWindow事件。

因此,您需要做的是为您的应用程序添加一个计时器,处理其Tick事件,并在该事件处理程序内部使用当前位置更新您的文本框。

例如:

Public Class MainWindow

    Private WithEvents timer As New System.Windows.Threading.DispatcherTimer()

    Public Sub New()
        ' Initialize the timer.
        timer.Interval = new TimeSpan(0, 0, 1);  ' "tick" every 1 second

        ' other code that goes in the constructor
        ' ...
    End Sub

    Private Sub timer_Tick(sender As Object, e As EventArgs) Handles timer.Tick
        ' TODO: Add code to update textbox with current position
    End Sub

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs)
        ' Start the timer first.
        timer.Start()

        ' Then start playing your music.
        MyiSoundengine.Play2D("Music/001.mp3")
    End Sub

    ' any other code that you need inside of your MainWindow class
    ' ...

End Class

请注意在计时器对象的类级声明中使用WithEvents关键字。这使得仅使用事件处理程序上的Handles语句来轻松处理其事件。否则,您必须在构造函数内部使用AddHandler将事件处理程序方法连接到所需的事件。