為啥會有這篇...純粹因為最近用C++ Builder寫專案,想讓UI的Feedback可以Q彈滑順一點。不過因為是用Firemonkey的跨平台專案功能,意思是如果你想發揮Firemonkey的跨平台性去做多線程處理UI更新,勢必不可能用到系統API來處理(例如說Windows上用CreateThread來實做) 不過既然沒辦法直接用系統API來處理,去Google了大概三四十頁的搜尋結果,後來參考一個日本人的Blog才寫出來算是比較簡潔的解法...,用ECB官方自帶的類別庫還有用到了TThread類別來實做(話說小吐槽一下...馬的C++Builder跟Delphi在處理跨線程UI控制真的很麻煩...像在.NET內用委派甚至解除跨線程安全檢查就好了、在QT內也是委派投擲訊息就好...CB內要實做委派"不能投擲參數"這點超級麻煩...意思是如果你要委派的函數有參數,就得額外在開一個新的函數來收你的委派然後跑在UI Thread來處理事情,參數也要額外宣告變數來做存放..我靠) class CoreModuFunc : public TCppInterfacedObject { public: CoreModuFunc(TTabbedForm* Form) : FForm(Form) {} virtual void __fastcall Invoke(void) { while (1) { DirectNewItem("Hi"); Sleep(5000); } } void DirectNewItem(String Str) { TempStr = Str; TThread::Synchronize(TThread::CurrentThread, AddNewItem); } void __fastcall AddNewItem(void)//注意一定得用fastcall,才能用Synchronize委派 { if (TempStr == "") return; FForm->ListBox1->Items->Add(TempStr ); } private: TForm1 * FForm; //要控制的UI Form指針 String TempStr ; //存放參數的點 }; 然後如果你要...