저는 스캔을 위해 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
@Brannon : 답변 해 주셔서 감사합니다. 나는 아무것도 막지 않을 것이라고 확신한다. 라이브러리와 함께 제공되는 데모 프로그램에도 동일한 문제가 있습니다. – xsl