这是简单的 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;
线路
FreeOnTerminate := True;
应该在 TMyThread.Create 构造函数中。