Обновите компонент 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, немного поработав, вы можете превратить их в более сложные параметры.

Другие вопросы по тегам