线程释放自己的窗体类字段时报错: error code 5(100分)

  • 主题发起人 主题发起人 DF7C3
  • 开始时间 开始时间
D

DF7C3

Unregistered / Unconfirmed
GUEST, unregistred user!
{
TMyThread是我自定义的一个线程类,代码如下所示。
但是释放的时候,FreeAndNil(FForm2)完全正常,FreeAndNil(FForm1)就报错: error code 5,
请问是怎么回事?
}
TMyThread= class(TThread)
private
FForm1: TMyForm;
FForm2: TForm;
protected
procedure Execute;
override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy;
override;
property Form1: TMyForm read FForm1: //TMyForm 是我自定义的一个窗体
property Form2: TForm read FForm2:
end;

////////////////////////////////////////////////
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FForm1 := TMyForm.Create;(nil);
FForm2 := TForm.Create(nil);
FreeOnTerminate := True;
end;

destructor TMyThread.Destroy;
begin
FreeAndNil(FForm2);
//执行正常
FreeAndNil(FForm1);
//执行时报错: error code 5
inherited;

end;

procedure TMythread.Execute;
begin
//这里面的代码与Form1和Form2毫无关系
end;
 
把顺序调换一下,
FreeAndNil(FForm1);
FreeAndNil(FForm2);看看是否正常。
 
看看FForm1的destroy做了什么
 
FForm1就是放了一个进度条和一个TBitButtuon的窗体,没写任何代码。
 
FForm1: TMyForm;------------TMyform类你是从那里继承得到的。
 
error code 5:代表 拒绝访问
caption := SysErrorMessage(5);
 
TMyForm是从TForm继承的。
 
贴更多的代码上来
 
界面操作最好不要在線程下面執行,如創建窗口之類的,不知道這樣會不會更好?
因為FForm2釋放是正常的,TMyForm會不會處理有什麽問題?
 
窗口如果是在工作者线程里创建的而线程里又没有消息循环。那么白创建了。
 
我觉得你的FForm1其实已经释放掉了,释放了一个不存在的对象
 
把 constructor TMyThread.Create(CreateSuspended: Boolean);中的FreeOnTerminate := True;
去掉,在调用线程释放即可。
 
后退
顶部