Я использую библиотеку saraff twain. Сканер должен возвращать исключения во время процесса сканирования клиенту. Так, например, если фидер сканера тянет две страницы (или больше) одновременно, он выдаст исключение. Однако, когда я попробовал библиотеку, я не смог поймать эти исключения.
Вот мой код:
public Stream Acquire(Source source, IEnumerable<CapEnum> caps)
{
try
{
var _formatter = new BinaryFormatter();
var _result = new MemoryStream();
var _images = new List<System.Drawing.Image>();
TwainExternalProcess.Execute(
TwainService._GetExecFileName(source),
twain =>
{
twain.EndXfer += (sender, e) => _images.Add(e.Image);
twain.SourceIndex = source.Id;
twain.OpenDataSource();
foreach (var _cap in caps)
{
using (var _stream = new MemoryStream(_cap.Current.RawValue))
{
twain.SetCap(_cap.Cap, _formatter.Deserialize(_stream));
}
}
twain.Acquire();
});
var _params = new EncoderParameters(2);
_params.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionNone);
_params.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
_images[0].Save(
_result, ImageCodecInfo.GetImageEncoders().First(x => x.MimeType == "image/tiff"), _params);
_params.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
for (int i = 0; i < _images.Count; i++)
{
_images[0].SaveAdd(_images[i], _params);
}
foreach (var _image in _images)
{
_image.Dispose();
}
_result.Seek(0, SeekOrigin.Begin);
return _result;
}catch(TwainException twainException)
{
throw twainException;
}
catch (Exception ex)
{
throw new FaultException(ex.Message);
}
}
Я ожидал, что метод должен вызвать исключение в случае PaperJam, Double Paper Feeded .... Однако я не смог поймать исключения.
Не могли бы вы дать мне представление о том, что мне не хватает? Я использую сканер Canon DR-C240.