Я пишу приложение, которое использует 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, поэтому любая информация о том, как я могу решить эту проблему или о причинах этой проблемы, будет полезной.