VintaSoft Twain .NET SDK v10.2
How to detect that paper is jammed?

Kodak scanner can send asynchronous event when paper is jammed, scanner is switched off, etc.
TWAIN Advanced Demo shows how to work with asynchronous events of device.


Example: Here is an example that shows how to detect when paper is jammed.

''' <summary>
''' Detects the paper jamm.
''' </summary>
Public Sub DetectPaperJam(ByVal device As Device)
    ' disable device UI
    device.ShowUI = False
    ' disable device when images are acquired
    device.DisableAfterAcquire = True

    ' open the device
    device.Open()

    ' set device settings
    device.PixelType = PixelType.RGB
    device.UnitOfMeasure = UnitOfMeasure.Inches
    device.Resolution = New Resolution(300.0F, 300.0F)

    Try
        ' get events supported by device
        Dim supportedDeviceEvents As DeviceEventId() = device.GetSupportedAsyncEvents()
        ' for each supported event
        For i As Integer = 0 To supportedDeviceEvents.Length - 1
            ' if device can report when paper is jammed
            If supportedDeviceEvents(i) = DeviceEventId.PaperJam Then
                ' specify that device must report when paper is jammed
                device.AsyncEvents = New DeviceEventId() {DeviceEventId.PaperJam}

                ' subscribe to the device event
                AddHandler device.AsyncEvent, New EventHandler(Of DeviceAsyncEventArgs)(AddressOf device_DeviceEvent)

                Exit For
            End If
        Next
    Catch ex As Exception
        Console.WriteLine(ex.ToString())
    End Try

    ' subscribe to the Device.ImageAcquired, Device.ScanCompleted, ... events
    '...

    ' acquire images from device
    device.Acquire()
End Sub

''' <summary>
''' Occurred the device event.
''' </summary>
Private Sub device_DeviceEvent(ByVal sender As Object, ByVal e As DeviceAsyncEventArgs)
    Console.WriteLine("Paper is jammed.")
End Sub
              
/// <summary>
/// Detects the paper jamm.
/// </summary>
public void DetectPaperJam(Device device)
{
    // disable device UI
    device.ShowUI = false;
    // disable device when images are acquired
    device.DisableAfterAcquire = true;

    // open the device
    device.Open();

    // set device settings
    device.PixelType = PixelType.RGB;
    device.UnitOfMeasure = UnitOfMeasure.Inches;
    device.Resolution = new Resolution(300f, 300f);

    try
    {
        // get events supported by device
        DeviceEventId[] supportedDeviceEvents = device.GetSupportedAsyncEvents();
        // for each supported event
        for (int i = 0; i < supportedDeviceEvents.Length; i++)
        {
            // if device can report when paper is jammed
            if (supportedDeviceEvents[i] == DeviceEventId.PaperJam)
            {
                // specify that device must report when paper is jammed
                device.AsyncEvents = new DeviceEventId[] { DeviceEventId.PaperJam };

                // subscribe to the device event
                device.AsyncEvent += new EventHandler(device_DeviceEvent);

                break;
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }

    // subscribe to the Device.ImageAcquired, Device.ScanCompleted, ... events
    //...

    // acquire images from device
    device.Acquire();
}

/// <summary>
/// Occurred the device event.
/// </summary>
private void device_DeviceEvent(object sender, DeviceAsyncEventArgs e)
{
    Console.WriteLine("Paper is jammed.");
}