mirror of
https://github.com/soukoku/ntwain.git
synced 2025-07-16 04:58:10 +08:00
Add reset on cancel so sample ds works.
This commit is contained in:
parent
4d8da799c0
commit
232aa93e6e
@ -2,7 +2,6 @@
|
|||||||
using NTwain.Native;
|
using NTwain.Native;
|
||||||
using NTwain.Triplets;
|
using NTwain.Triplets;
|
||||||
using System;
|
using System;
|
||||||
using System.Buffers;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
@ -111,8 +110,7 @@ namespace NTwain
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (readyArgs.Cancel != CancelType.SkipCurrent &&
|
if (readyArgs.Cancel != CancelType.SkipCurrent)
|
||||||
Transferred != null)
|
|
||||||
{
|
{
|
||||||
// transfer normally and only if someone's listening
|
// transfer normally and only if someone's listening
|
||||||
// to DataTransferred event
|
// to DataTransferred event
|
||||||
@ -146,6 +144,7 @@ namespace NTwain
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
HandleXferCode(ref sts, ref pending);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -164,7 +163,7 @@ namespace NTwain
|
|||||||
} while (sts.RC == TWRC.SUCCESS && pending.Count != 0);
|
} while (sts.RC == TWRC.SUCCESS && pending.Count != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
HandleXferCode(sts);
|
HandleXferCode(ref sts, ref pending);
|
||||||
if (State >= STATE.S5)
|
if (State >= STATE.S5)
|
||||||
{
|
{
|
||||||
_uiThreadMarshaller.Send(obj =>
|
_uiThreadMarshaller.Send(obj =>
|
||||||
@ -175,7 +174,7 @@ namespace NTwain
|
|||||||
_inTransfer = false;
|
_inTransfer = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleXferCode(STS sts)
|
private void HandleXferCode(ref STS sts, ref TW_PENDINGXFERS pending)
|
||||||
{
|
{
|
||||||
switch (sts.RC)
|
switch (sts.RC)
|
||||||
{
|
{
|
||||||
@ -190,9 +189,9 @@ namespace NTwain
|
|||||||
var twain = ((TwainAppSession)obj!);
|
var twain = ((TwainAppSession)obj!);
|
||||||
twain.TransferCanceled?.Invoke(twain, new TransferCanceledEventArgs());
|
twain.TransferCanceled?.Invoke(twain, new TransferCanceledEventArgs());
|
||||||
}, this);
|
}, this);
|
||||||
TW_PENDINGXFERS pending = default;
|
sts = WrapInSTS(DGControl.PendingXfers.EndXfer(ref _appIdentity, ref _currentDS, ref pending));
|
||||||
DGControl.PendingXfers.EndXfer(ref _appIdentity, ref _currentDS, ref pending);
|
sts = WrapInSTS(DGControl.PendingXfers.Reset(ref _appIdentity, ref _currentDS, ref pending));
|
||||||
// todo: also reset?
|
if (sts.RC == TWRC.SUCCESS) State = STATE.S5;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// TODO: raise error event
|
// TODO: raise error event
|
||||||
@ -206,13 +205,15 @@ namespace NTwain
|
|||||||
case TWCC.PAPERDOUBLEFEED:
|
case TWCC.PAPERDOUBLEFEED:
|
||||||
case TWCC.PAPERJAM:
|
case TWCC.PAPERJAM:
|
||||||
pending = default;
|
pending = default;
|
||||||
DGControl.PendingXfers.EndXfer(ref _appIdentity, ref _currentDS, ref pending);
|
sts = WrapInSTS(DGControl.PendingXfers.EndXfer(ref _appIdentity, ref _currentDS, ref pending));
|
||||||
break;
|
break;
|
||||||
case TWCC.OPERATIONERROR:
|
case TWCC.OPERATIONERROR:
|
||||||
GetCapCurrent(CAP.CAP_INDICATORS, out TW_BOOL showIndicator);
|
GetCapCurrent(CAP.CAP_INDICATORS, out TW_BOOL showIndicator);
|
||||||
if (_userInterface.ShowUI == 0 && showIndicator == TW_BOOL.False)
|
if (_userInterface.ShowUI == 0 && showIndicator == TW_BOOL.False)
|
||||||
{
|
{
|
||||||
// todo: alert user and drop to S4
|
// todo: alert user and drop to S4
|
||||||
|
sts = WrapInSTS(DGControl.PendingXfers.EndXfer(ref _appIdentity, ref _currentDS, ref pending));
|
||||||
|
sts = WrapInSTS(DGControl.PendingXfers.Reset(ref _appIdentity, ref _currentDS, ref pending));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user