Private VSTwain1 As New VintaSoftTwain()
''' <summary>
''' Scans images asynchronously.
''' </summary>
Private Sub StartScan()
    ' open the device manager
    If Not VSTwain1.DeviceManager_Open() Then
        Console.WriteLine(VSTwain1.errorString)
        Exit Sub
    End If
    ' select device using standard device selection dialog
    VSTwain1.DeviceManager_ShowDefaultDeviceSelectionDialog()
    ' open the device
    If Not VSTwain1.Device_Open() Then
        Console.WriteLine(VSTwain1.errorString)
        Exit Sub
    End If
    ' specify that device UI must be shown
    VSTwain1.Device_ShowUI = True
    ' set settings of TIFF encoder
    VSTwain1.TiffEncoder_MultiPage = True
    ' subscribe to the device events
    AddHandler VSTwain1.DeviceImageAcquired, AddressOf VSTwain1_ImageAcquired
    AddHandler VSTwain1.DeviceScanCompleted, AddressOf VSTwain1_ScanCompleted
    AddHandler VSTwain1.DeviceScanFailed, AddressOf VSTwain1_ScanFailed
    AddHandler VSTwain1.DeviceScanCanceled, AddressOf VSTwain1_ScanCanceled
    ' if device has feeder
    If VSTwain1.Device_Feeder_Present Then
        ' enable feeder
        VSTwain1.Device_Feeder_Enabled = True
        ' specify that application want to acquire all pages from the feeder
        VSTwain1.Device_XferCount = -1
        ' if pages can be scanned in duplex mode
        If VSTwain1.Device_Feeder_DuplexMode <> DUPLEXMODE.DUPLEXMODE_NoDuplex Then
            ' enable duplex scanning
            VSTwain1.Device_Feeder_DuplexEnabled = True
        End If
        ' if feeder can detect paper
        If VSTwain1.Device_Feeder_PaperDetectable Then
            ' if feeder is loaded
            If VSTwain1.Device_Feeder_Loaded Then
                ' acquire images asynchronously
                VSTwain1.Device_AcquireImage()
            End If
        Else
            ' acquire images asynchronously
            VSTwain1.Device_AcquireImage()
        End If
    End If
End Sub
Private Sub VSTwain1_ImageAcquired()
    ' get index of acquired image
    Dim imageIndex As Integer = VSTwain1.AcquiredImages_Count - 1
    ' save acquired image to TIFF file
    If Not VSTwain1.AcquiredImages_Save(imageIndex, "test.tif") Then
        Console.WriteLine(VSTwain1.errorString)
    End If
End Sub
Private Sub VSTwain1_ScanCompleted()
    Console.WriteLine("Scan is completed.")
End Sub
Private Sub VSTwain1_ScanFailed(errorString As String)
    Console.WriteLine(String.Format("Scan is failed: {0}.", errorString))
End Sub
Private Sub VSTwain1_ScanCanceled()
    Console.WriteLine("Scan is canceled.")
End Sub