另外,如果用传统Borland C++ 32位编译器,不支持匿名函数(lambda),需要写更多的代码
[quote=引用 14 楼 早打大打打核战争的回复:]这个确实不是我之前提到的那个文章,那篇找不到了,我印象是两年前的emb论坛上的帖子,有人说10.2的代码升级到10.3之后Application.ProcessMessages不工作了,然后Marco Cantu回了他一下
这个确实不是我之前提到的那个文章,那篇找不到了,我印象是两年前的emb论坛上的帖子,有人说10.2的代码升级到10.3之后Application.ProcessMessages不工作了,然后Marco Cantu回了他一下
参考:https://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
我查看了代码,代码中原来是有Application->ProcessMessages(); 原来10.2.2编译出来界面刷新是正常的,用了10.3.3编译,感觉Application->ProcessMessages()无效了,这很奇怪。
[quote=引用 6 楼 ooolinux 的回复:]我查看了代码,代码中原来是有Application->ProcessMessages(); 原来10.2.2编译出来界面刷新是正常的,用了10.3.3编译,感觉Application->ProcessMessages()无效了,这很奇怪。
Application.ProcessMessages在FMX应用中也可以使用,但是不能保证在其他平台上有和windows上一样的效果,我记得Marco Cantu曾经有一篇文章谈到过这个问题,但是我没保存,我先找找。 估计你是在事件处理中有大量的耗时操作,然后在其中调用Application.ProcessMessages来更新显示,这种模式(尤其在安卓上)可以使用Timer来更新UI显示,或者建立线程来执行耗时的计算,在线程中使用异步调用或者Synchronize更新UI: void __fastcall TForm1::Button1Click(TObject *Sender) { TThread::CreateAnonymousThread( [&, this]() { // ... for (int i = 0; i < 100; i++) { // TThread::Synchronize (TThread::CurrentThread, ... Form1->BeginInvoke( // 异步调用从XE8开始支持 [this, i]() { Form1->Label1->Caption = IntToStr(i); // 不再需要 Application->ProcessMessages(); } ); Sleep(100); } } )->Start(); }
828
社区成员
53,611
社区内容
加载中
试试用AI创作助手写篇文章吧