Это невозможно. Каждое окно принадлежит потоку, который его создал, и это право собственности не может быть передано.
Дело не в том, чтобы пересылать сообщение в другую ветку. Каждый поток имеет свою очередь сообщений. Когда вы отправляете или публикуете сообщение в окне, ОС проверяет, какому потоку принадлежит это окно, и направляет сообщение в очередь сообщений этого потока. Потоки не могут читать ни одну очередь сообщений, кроме своей собственной, поэтому поток не может обрабатывать сообщения окон другого потока.
Вы можете пересылать сообщения в другой поток, как в первой идее в ответе Джона , но в качестве обработчика сообщений общего назначения это станет более сложным, чем стоит. Многие сообщения предназначены для изменения состояния окна, но вы не можете изменить состояние, кроме как из собственного потока окна. Некоторые сообщения отправляются с целью получения значимого возвращаемого значения, но вы не можете знать, что возвращать, пока сообщение не будет обработано, поэтому вам придется заблокировать, ожидая, пока рабочий поток обработает сообщение.
Вы бы лучше идентифицировали небольшой набор сообщений, которые действительно могут быть выгружены в рабочий поток, и обрабатывали их специально. Как только вы это сделаете, у вас не будет окна, сообщения которого обрабатываются в другом потоке; у вас просто будет обычный рабочий поток, и он будет намного менее запутанным.
Если имеются сообщения , отправляемые в ваше окно, которые требуют много времени для обработки, но отправителю либо не нужно знать результат, либо вы знаете результат, прежде чем закончите обработку, тогда вы можете дать ранний ответ , позвонив по номеру ReplyMessage
. Это позволяет отправляющему потоку продолжать работу, пока поток вашего окна выполняет дополнительную работу.