如何用C#控制twain。dll实时接收扫描完的信息,而不是一次扫描的信息一次回传
现在用C#写了控制twain.dll的方法,借鉴了大神的代码,但现在出现了一个问题,现在数据的回传方式是通过windows监听系统消息来完成,在扫描仪完成一次扫描之后(不管是一张,2张,还是更多),扫描仪没有待扫描的文件后,才返回可以接受信息的信号,大大的延迟了
有没有办法,实现扫描仪扫描完一张就即使返回数据,也就是每扫描完一张返回一次数据,跪求大神帮忙解惑 ,现有的代码如何
bool IMessageFilter.PreFilterMessage(ref Message m)
{
TwainCommand cmd = tw.PassMessage(ref m);
if (cmd == TwainCommand.Not)
return false;
switch (cmd)
{
case TwainCommand.CloseRequest:
{
EndingScan();
tw.CloseSrc();
break;
}
case TwainCommand.CloseOk:
{
EndingScan();
tw.CloseSrc();
break;
}
case TwainCommand.DeviceEvent:
{
break;
}
case TwainCommand.TransferReady:
{
ArrayList pics = tw.TransferPictures();
picnumber++;
//图像处理方法
}
break;
}
}
return false;
}
/// <summary>
/// 传递消息
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public TwainCommand PassMessage(ref Message m)
{
if (srcds.Id == IntPtr.Zero)
return TwainCommand.Not;
int pos = GetMessagePos();
winmsg.hwnd = m.HWnd;
winmsg.message = m.Msg;
winmsg.wParam = m.WParam;
winmsg.lParam = m.LParam;
winmsg.time = GetMessageTime();
winmsg.x = (short)pos;
winmsg.y = (short)(pos >> 16);
Marshal.StructureToPtr(winmsg, evtmsg.EventPtr, false);
evtmsg.Message = 0;
TwRC rc = DSevent(appid, srcds, TwDG.Control, TwDAT.Event, TwMSG.ProcessEvent, ref evtmsg);
if (rc == TwRC.NotDSEvent)
return TwainCommand.Not;
if (evtmsg.Message == (short)TwMSG.XFerReady)
return TwainCommand.TransferReady;
if (evtmsg.Message == (short)TwMSG.CloseDSReq)
return TwainCommand.CloseRequest;
if (evtmsg.Message == (short)TwMSG.CloseDSOK)
return TwainCommand.CloseOk;
if (evtmsg.Message == (short)TwMSG.DeviceEvent)
return TwainCommand.DeviceEvent;
return TwainCommand.Null;
}