Private Sub streamreceived(ByVal sender As System.Object, ByVal stream As Franson.BlueTools.ServiceStream)
' do what you want with the Stream here
End Sub

Below is the class (just copy and paste into a file):

'
' (c) 2006 Franson Technology AB, Sweden, All rights reserved
'
' franson.com
'
' Written by Jonas Sandman
'
' This code is provided merely as an example.
' No guarantees are made for its functionality or stability.

Public Class StreamAsync
' reference to Service we want a Stream to
Dim m_service As Franson.BlueTools.RemoteService = Nothing
Dim m_callback As StreamAsyncReceived = Nothing
Dim m_control As System.Windows.Forms.Control = Nothing
' delegate to call when Stream is received
Public Delegate Sub StreamAsyncReceived(ByVal sender As Object, ByVal stream As Franson.BlueTools.ServiceStream)
' Constructor
' Since Visual Basic does not support dynamic events, we pass the callback method in the constructor
Public Sub New(ByVal service As Franson.BlueTools.RemoteService, ByVal callback As StreamAsyncReceived)
m_service = service
m_callback = callback
End Sub
' call this method to actually retrieve stream
Public Sub GetStreamAsync()
' run threadpool
System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf Run))
End Sub
Public Property Parent() As System.Windows.Forms.Control
Get
Return m_control
End Get
Set(ByVal Value As System.Windows.Forms.Control)
m_control = Value
End Set
End Property
Private Sub Run(ByVal obj As Object)
Dim stream As Franson.BlueTools.ServiceStream
' get the stream - this is in a thread!
stream = m_service.Stream
If (Parent Is Nothing) Then
m_callback(Me, stream)
Else
Parent.Invoke(m_callback, New Object() {Me, stream})
End If
End Sub
End Class