VintaSoft Twain .NET SDK 15.4: Руководство для .NET разработчика
В этом разделе
Определение замятия бумаги во время TWAIN сканирования?
В этом разделе
Сканер Kodak может отправлять асинхронные события при замятии бумаги, выключении сканера и т.д.
TWAIN Advanced Demo показывает, как работать с асинхронными событиями устройства.


Вот C#/VB.NET код, который демонстрирует, как обнаружить замятие бумаги во время TWAIN сканирования:
/// <summary>
/// Detects the paper jamm.
/// </summary>
public void DetectPaperJam(Vintasoft.Twain.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 = Vintasoft.Twain.PixelType.RGB;
    device.UnitOfMeasure = Vintasoft.Twain.UnitOfMeasure.Inches;
    device.Resolution = new Vintasoft.Twain.Resolution(300f, 300f);

    try
    {
        // get events supported by device
        Vintasoft.Twain.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] == Vintasoft.Twain.DeviceEventId.PaperJam)
            {
                // specify that device must report when paper is jammed
                device.AsyncEvents = new Vintasoft.Twain.DeviceEventId[] { Vintasoft.Twain.DeviceEventId.PaperJam };

                // subscribe to the device event
                device.AsyncEvent += new System.EventHandler<Vintasoft.Twain.DeviceAsyncEventArgs>(device_DeviceEvent);

                break;
            }
        }
    }
    catch (System.Exception ex)
    {
        System.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, Vintasoft.Twain.DeviceAsyncEventArgs e)
{
    System.Console.WriteLine("Paper is jammed.");
}
''' <summary>
''' Detects the paper jamm.
''' </summary>
Public Sub DetectPaperJam(device As Vintasoft.Twain.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 = Vintasoft.Twain.PixelType.RGB
    device.UnitOfMeasure = Vintasoft.Twain.UnitOfMeasure.Inches
    device.Resolution = New Vintasoft.Twain.Resolution(300.0F, 300.0F)

    Try
        ' get events supported by device
        Dim supportedDeviceEvents As Vintasoft.Twain.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) = Vintasoft.Twain.DeviceEventId.PaperJam Then
                ' specify that device must report when paper is jammed
                device.AsyncEvents = New Vintasoft.Twain.DeviceEventId() {Vintasoft.Twain.DeviceEventId.PaperJam}

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

                Exit For
            End If
        Next
    Catch ex As System.Exception
        System.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(sender As Object, e As Vintasoft.Twain.DeviceAsyncEventArgs)
    System.Console.WriteLine("Paper is jammed.")
End Sub