Delphi: Как сделать управление VCL поточно-ориентированным при взаимодействии с данными из другого потока? - PullRequest
0 голосов
/ 17 марта 2020

В единице DeviceManager у меня есть форма VCL formDeviceManager, которая взаимодействует с данными из других TThread, DetectDrivesThread. DetectDrivesThread создается и выполняется в основной форме программы.

procedure TDetectDrivesThread.Execute;
begin
  while not Terminated do
  begin
    sleep(1000);
    try
      DetectDrives.refreshRemovableDrivesList(formMain.dbConn);
    finally
    end;
  end;
end;

Это конструктор для TDetectDrivesThread:

constructor TDetectDrivesThread.Create();
begin
  inherited Create(false);
  DetectDrives := TDetectDrives.Create(formMain.dbConn);
  FreeOnTerminate := false;
end;

formDeviceManager имеет несколько элементов управления, которые позволяют пользователю просматривать, удалять и изменять данные о таких дисках. Однако мои элементы управления не являются поточно-ориентированными, и во время выполнения DetectDrivesThread я мог бы использовать кнопку «Удалить устройство» в formDeviceManager, чтобы освободить объект, соответствующий USB-устройству. Это может привести к тому, что программа обработает sh, если запущены какие-либо методы из этого объекта.

...