Multithreading 线程中的Delphi DragDrop组件

Multithreading 线程中的Delphi DragDrop组件,multithreading,delphi,drag-and-drop,delphi-2009,Multithreading,Delphi,Drag And Drop,Delphi 2009,我使用这个组件来处理拖放文件 奇怪的是,Drop进程只工作一次,而DragComponent.Files.Count却永远为0 我就是这么叫它的 procedure TForm1.DropFileDrop(Sender: TObject; ShiftState: TShiftState; APoint: TPoint; var Effect: Integer); var DropThread : TDragThread; begin DropThread := TDragThread

我使用这个组件来处理拖放文件

奇怪的是,Drop进程只工作一次,而DragComponent.Files.Count却永远为0

我就是这么叫它的

procedure TForm1.DropFileDrop(Sender: TObject; ShiftState: TShiftState;
  APoint: TPoint; var Effect: Integer);
var
  DropThread : TDragThread;
begin
 DropThread := TDragThread.Create(DropFile);
 DropThread.Resume;
end;

我想知道为什么会发生这种情况,并提前感谢:)。

不要从其他线程操作VCL组件

无法保证组件的放置事件信息在放置事件完成后仍然有效


在构造线程时(即,完全填充
dragaray
)从组件中复制所需的所有信息,然后在执行线程时使用缓存的数据。不要将引用存储在
DragComponent
中,否则您可能会试图从线程的
Execute
方法中使用它,而您确实不应该这样做。

从主线程中的
DragComponent
读取文件名,并将处理留给工作线程,这有帮助吗?我没有这个拖放组件的经验,所以我不知道它的线程规则是什么。非常感谢Rob你是对的,不能保证信息仍然有效,我不知道我怎么会没有这个!!:D
procedure TForm1.DropFileDrop(Sender: TObject; ShiftState: TShiftState;
  APoint: TPoint; var Effect: Integer);
var
  DropThread : TDragThread;
begin
 DropThread := TDragThread.Create(DropFile);
 DropThread.Resume;
end;