在多线程应用中定义了一个属性,是一个接口,怎么接口老是丢失呢? (100分)

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

darnis

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是 线程类的执行体:
procedure TCadDrive.Execute;
begin
{ Place thread code here }
CoInitialize(nil)
//
FreeOnTerminate := true;

FError := false;
if (FController = nil)and(not FConnect) then
try
Connect;
FConnect := true;
except
on e: Exception do
begin
FConnect := false;
FError := true;
showmessage(e.Message);
end;
end
else
FConnect:=true;
CoUninitialize
// 到这里时, FController 是得到一个接口对象了的。但是,,
end;

下面这个过程中会产生一个线程。
procedure TForm1.Button1Click(Sender: TObject);
var
con: IAcadApplication;
begin
if cad=nil then // cad 定义为TForm1 的 private 成员
begin
cad := TCadDrive.Create(true)

end
//
cad.Resume;
cad.WaitFor;
// 在 线程的 Execute 中设置断点,可以看到FController 已经取得了接口的引用
// 但是为啥在这里就看到 Controller 为 nil 了呢????
con := cad.Controller

// Controller 是一个接口属性,在线程中是这样声明的。
// property Controller: IAcadApplication read FController write SetController;
con.Application.Visible:=not con.Application.Visible;
end;

 
你把线程的FreeOnTerminate设为True,不是一结束执行就自动释放了吗,当然
线程的属性就都是nil了.
 
谢谢,, :-)

现在又有一个问题了:
为啥程序运行到最后,就是通过这个从线程中引用过来的接口,一调用接口支持的方法或者方法时就会出现

“应用程序的OS或者是OS的版本不正确”

这样的错误信息呢?
 
接受答案了.
 
后退
顶部