Проблема с NativeWindow, созданным в контексте потока - PullRequest
0 голосов
/ 05 августа 2009

Я создаю подкласс NativeWindow ('MyNativeWindow'), чтобы использовать его насос сообщений для связи со старой библиотекой DLL. Мой код выполняется внутри приложения WinForms, но я бы хотел, чтобы библиотека DLL и ее обработка сообщений выходили за рамки графического интерфейса.

При создании MyNativeWindow из контекста приложения (непосредственно перед созданием главной формы моего приложения) все работает - вызывается WndProc в NativeWindow и обрабатываются события. Однако, когда я использую поток для инициализации MyNativeWindow, кажется, что насос сообщений не будет работать.

Есть ли какие-либо ограничения на создание NativeWindow?

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

Я не уверен, что вы ожидаете здесь, поэтому я не уверен, что смогу ответить вам полностью. У NativeWindow нет помпы сообщений. Он просто подклассирует существующее окно, заменяя его оконную процедуру. Когда насос сообщений потока доставляет сообщение для этого окна, он переходит к процедуре окна подкласса NativeWindow, а не к исходной процедуре окна. Если подкласс не обрабатывает его, он должен быть перенаправлен в исходную оконную процедуру.

Я подозреваю, что вы создаете окно, а затем подкласс NativeWindow в вашем дополнительном потоке, но вы не создаете насос сообщений в этом потоке. Так что никакие сообщения никогда не обрабатываются. Если вы хотите создать насос сообщений во вторичном потоке и не дать ему просто выйти, вы должны создать окно и затем вызвать некоторую форму Application.Run в этом потоке. Затем вы можете подклассировать окно и получать сообщения.

0 голосов
/ 15 октября 2009

Вам также нужно запустить насос сообщений, создание NativeWindow не делает этого AFAIK.

Бесстыдный плагин: попробуйте backgrounder и сделайте что-то вроде:

BackgroundHelper helper = new BackgroundHelper();
helper.Background(() => {
    MyNativeWindow receiver = new MyNativeWindow();
});

И посмотри, сработает ли это из коробки.

(Если нет, не стесняйтесь приставать ко мне в системе отслеживания проблем: -).)

...