Обновите компонент VCL из CreateAnonymousThread - PullRequest
8 голосов
/ 19 июля 2011

Кажется, что Синхронизировать нельзя использовать из потока, созданного с использованием 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 ]

9 голосов
/ 19 июля 2011

Вы можете использовать синхронизацию в этом случае, например ::100100

TThread.Synchronize(nil, procedure begin UpdateComponent(); end);

И если вы хотите выполнить асинхронный вызов метода в основном потоке, вы можете использовать TThread.Queue, например ::

TThread.Queue(nil, procedure begin UpdateComponent(); end);
4 голосов
/ 19 июля 2011

Вы также можете использовать PostMessage для безопасной очереди или SendMessage для безопасной синхронизации из анонимного потока.

1 голос
/ 19 июля 2011

Вы можете использовать PostMessage (Form.Handle, WM_UPDATEMYCOMP, 0, 0);

Вы можете определить свой собственный идентификатор сообщения, wparam, lparam, немного поработав, вы можете превратить их в более сложные параметры.

...