我在写一个使用TwainDotNet进行扫描的应用程序。我可以过滤来自不同线程窗口的消息吗?
一切工作正常,但扫描使用户界面不可用。所以我决定扫描一个不同的线程,但我从来没有扫描成功的事件。所以,我决定采取在执行仔细一看:
public DataSourceManager(Identity applicationId,
IWindowsMessageHook messageHook)
{
// Make a copy of the identity in case it gets modified
ApplicationId = applicationId.Clone();
ScanningComplete += delegate { };
TransferImage += delegate { };
_messageHook = messageHook;
_messageHook.FilterMessageCallback = FilterMessage;
IntPtr windowHandle = _messageHook.WindowHandle;
_eventMessage.EventPtr =
Marshal.AllocHGlobal(Marshal.SizeOf(typeof(WindowsMessage)));
而任何过滤的方法:
protected IntPtr FilterMessage(IntPtr hwnd, int msg, IntPtr wParam,
IntPtr lParam, ref bool handled)
{
通常这种方法过滤日志消息,但如果我在不同的扫描线程我没有收到任何。
我的代码扫描的部分是:
var scanningThread = new Thread((ThreadStart) delegate
{
// Previously I got the main UI form here, but that didn't work either
var form = new Form();
var messageHook = new WinFormsWindowMessageHook(form.Handle);
var scanner = new TwainEngine(messageHook);
scanner.TransferImage += TransferImage;
scanner.ScanningComplete += ScanningComplete;
scanner.StartScanning(twainSettings);
});
scanningThread.Start();
我什么都不知道了Win32消息架构等我怎么能解决这个问题,或者是什么原因导致这个问题将是有益的任何输入。
好友,你在错误的轨道上。不要在不同的线程上创建表单。没有显示的窗体句柄是毫无价值的。您是否确定在等待扫描完成时不会阻止GUI? – Brannon 2012-03-22 05:18:54
@Brannon:谢谢你的回应。我确信我没有阻止任何东西。该库附带的演示程序具有相同的问题。 – xsl 2012-03-22 09:25:10