Писал приложение под iOS, не задумываясь над различиями в ShowModal для разных платформ. В результате - когда назрела мысль портировать приложение под Android столкнулся с тем, что переделать код, использующий ShowModal на callback-вызовы очень сложно. Подумал, что может быть можно использовать эмуляцию, например:
function myMessageDialog(...): Integer;
var
mr: TModalResult;
begin
mr:=mrNone;
TDialogService.MessageDialog(...
procedure (const AResult: TModalResult)
begin
mr:=AResult
end);
while mr = mrNone do // ждем пока не сработает callback
Application.ProcessMessages;
Result:=mr; // и возвращаем результат
end;
Но... работать не хочет.
Почему? Ведь несмотря на то, что нативный диалог вызывается в контексте UI thread, коллбак и ProcessMessages работают в основном потоке приложения.
Вопрос
kami
Добрый день всем!
Писал приложение под iOS, не задумываясь над различиями в ShowModal для разных платформ. В результате - когда назрела мысль портировать приложение под Android столкнулся с тем, что переделать код, использующий ShowModal на callback-вызовы очень сложно. Подумал, что может быть можно использовать эмуляцию, например:
function myMessageDialog(...): Integer; var mr: TModalResult; begin mr:=mrNone; TDialogService.MessageDialog(... procedure (const AResult: TModalResult) begin mr:=AResult end); while mr = mrNone do // ждем пока не сработает callback Application.ProcessMessages; Result:=mr; // и возвращаем результат end;Но... работать не хочет.
Почему? Ведь несмотря на то, что нативный диалог вызывается в контексте UI thread, коллбак и ProcessMessages работают в основном потоке приложения.
7 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.