Вызов / выполнение функции ПОСЛЕ завершения или возврата функции вызывающего в FMX или системную библиотеку - PullRequest
0 голосов
/ 17 января 2020

Метод 'SendMessage' TMessageManager НЕ вызывает функцию 'Подписка' (или связанный с ней обратный вызов) ПОСЛЕ функция, которая вызывает функцию "SendMessage", завершена.

Для удобного решения этой проблемы я думал об использовании TTimer с наименьшим возможным интервалом времени (который составляет 1 миллисекунду), так что при включении таймера в функции вызывающего абонента должно быть вызвано событие OnTimer TTimer ПОСЛЕ функция, которая его включила. Я думаю, что это своего рода «медленный» и уродливый обходной путь для этой проблемы.

Существует ли какое-либо средство обмена сообщениями для всего приложения в FMX или системной библиотеке, которое может вызывать функцию обратного вызова ПОСЛЕ завершения или возврата функции вызывающей стороны ? (Другие сообщения приложений, обрабатываемые / вызываемые между ними, тоже не годятся). Это, кстати, для разработки на FMX или нескольких устройствах. Не указывается c для VCL или Windows Среда.

(Что я действительно хочу, так это иметь возможность отправлять сообщение в собственное приложение, аналогично тому, как Windows API-функция PostMessage ведет себя. Сообщения, отправленные PostMessage, появляются из windows функции обратного вызова процедуры после Функция PostMessage возвращается.)

1 Ответ

1 голос
/ 17 января 2020

TMessageManager.SendMessage() синхронно. Для асинхронной отправки посмотрите TThread.Queue(), если вы отправляете сообщения из рабочего потока, или TThread.ForceQueue(), если вы публикуете сообщения из основного потока пользовательского интерфейса.

...