Обновите компонент VCL из CreateAnonymousThread
Кажется, что Synchronize нельзя использовать из потока, созданного с помощью CreateAnonymousThread, поэтому вопрос таков: How i can update a VCL component from inside of a Thread created using CreateAnonymousThread?
TThread.CreateAnonymousThread(procedure
begin
//do something
UpdateCompnent();//how I can update a VCL component from here?
end
).Start;
3 ответа
Решение
В этом случае вы можете использовать синхронизацию, например:
TThread.Synchronize(nil, procedure begin UpdateComponent(); end);
И если вы хотите выполнить асинхронный вызов метода в основном потоке, вы можете использовать TThread.Queue
Например:
TThread.Queue(nil, procedure begin UpdateComponent(); end);
Вы также можете использовать PostMessage для безопасной очереди или SendMessage для безопасной синхронизации из анонимного потока.
Вы можете использовать PostMessage(Form.Handle, WM_UPDATEMYCOMP, 0, 0);
Вы можете определить свой собственный идентификатор сообщения, wparam, lparam, немного поработав, вы можете превратить их в более сложные параметры.