TOpenDialog 和多线程

问题描述 投票:0回答:1

这是简单的 Embarcadero Delphi (v. 11.3) 应用程序非常奇怪的行为...... 当同一线程启动 2 或 3 次(参见下面的代码)并单击 Button1 2 或 3 次时,TOpenDialog 窗口(在线程的最后一个实例结束后单击 Button2)会冻结应用程序。没有出现错误消息,需要从 Win 任务管理器(Ctrl+Alt+Del)关闭应用程序。

{MAIN UNIT}
procedure TForm1.Button1Click(Sender: TObject);
Begin
  MyThread:= TMyThread.Create(false);
End;
    
procedure TForm1.Button2Click(Sender: TObject);
Begin
  OpenDialog1.Execute;
End;
  
{THREAD UNIT}
procedure TMyThread.Execute;
Begin
  Sleep(2000);
  Synchronize(UpdateMainForm);
End;
    
procedure TMyThread.UpdateMainForm;
Begin
  Form1.Label1.Text:= 'Now thread ended!';
  EndMyThread;
End;

procedure TMyThread.EndMyThread;
Begin
  FreeOnTerminate:= true;
End;
multithreading delphi freeze
1个回答
0
投票

线路

FreeOnTerminate := True;

应该在 TMyThread.Create 构造函数中。

© www.soinside.com 2019 - 2024. All rights reserved.