Event VB.Net Tutorial

public class ValueEventArgs :  Inherits EventArgs
   Private oldTemp As Decimal
   Private newTemp As Decimal
   Public ReadOnly Property OldValue As Decimal
      Get
         Return Me.oldTemp
      End Get   
   End Property
   Public ReadOnly Property NewValue As Decimal
      Get
         Return Me.newTemp
      End Get
   End Property
   Public Sub New(oldTemp As Decimal, newTemp As Decimal)
      Me.oldTemp = oldTemp
      Me.newTemp = newTemp   
   End Sub
End Class
Public Delegate Sub ValueEventHandler(sender As Object,ev As ValueEventArgs)
Public Class ValueMonitor
   Private currentValue As Decimal
   Private threshholdValue As Decimal
   Public Event ValueThreshold As ValueEventHandler 
   Public Sub New(threshHold As Decimal)
      Me.threshholdValue = threshHold
   End Sub
   Public Sub SetValue(newValue As Decimal)
      If (Me.currentValue > threshholdValue And _
         newValue <= Me.threshholdValue) Or _
         (Me.CurrentValue < Me.threshholdValue And _
             newValue >= Me.threshholdValue) Then
         OnRaiseValueEvent(newValue)
      End If
      Me.currentValue = newValue
   End Sub
   Public Function GetValue() As Decimal
      Return Me.currentValue
   End Function
   Protected Overridable Sub OnRaiseValueEvent(newValue As Decimal)
      RaiseEvent ValueThreshold(Me, New ValueEventArgs(Me.currentValue, _ 
                                       newValue))
   End Sub                                       
End Class
Public Module Example
   Public Sub Main()
      Dim tempMon As New ValueMonitor(32d)
      tempMon.SetValue(31)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.",tempMon.GetValue())
      AddHandler tempMon.ValueThreshold, AddressOf TempMonitor
      tempMon.SetValue(33)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.",tempMon.GetValue())
      RemoveHandler tempMon.ValueThreshold, AddressOf TempMonitor
      tempMon.SetValue(31)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.",tempMon.GetValue())
   End Sub
   Private Sub TempMonitor(sender As Object, e As ValueEventArgs)
      Console.WriteLine("Value is changing from {0} to {1}.",e.OldValue, e.NewValue)
   End Sub 
End Module