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;
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;