Delphi - 线程不以ActiveX形式执行 - 但在其他地方执行

Jer*_*dge 5 delphi events multithreading activex delphi-7

我有一个名为TAlertThread的线程.线程通过触发事件与其所有者交互.例如,当某些数据在线程内可用时,它会设置一些临时变量并调用Synchronize(UpdateAlert),然后它会触发相应的事件.

现在,该线程在任何标准的Windows应用程序中都能正 我的问题是当我将该线程放在ActiveX表单(TActiveForm)中时.然后将ActiveX控件(也称为COM对象)嵌入Windows桌面小工具(通过HTML/Javascript).我也有这方面的经验,小工具不是问题.ActiveX组件在其目标中正常工作,但永远不会执行该线程.它甚至被称为完全与我从应用程序中调用它的方式相同.

这是ActiveX的一些限制,阻止线程执行?我不这么认为,因为内部需要线程的其他东西(例如TADOConnection)可以工作.事实上,我正确地适当地调用了CoInitialize和CoUninitialize.同样,在应用程序中完美运行,但在ActiveX中根本不起作用.

这是我如何称呼这个线程......

procedure TRMPDashXS.ExecThread;
begin
  //Thread created suspended
  lblStatus.Caption:= 'Executing Thread...'; 
  fThread:= TAlertThread.Create(fConnStr); //fConnStr = connection string
  fThread.Priority:=      tpIdle;
  fThread.OnConnect:=     Self.ThreadConnected;
  fThread.OnDisconnect:=  Self.ThreadDisconnected;
  fThread.OnBegin:=       Self.ThreadStarted;
  fThread.OnFinish:=      Self.ThreadFinished;
  fThread.OnAlert:=       Self.ThreadAlert;
  fThread.OnAmount:=      Self.ThreadAmount;
  fThread.Resume; //Execute the thread
end;
Run Code Online (Sandbox Code Playgroud)

pau*_*sm4 7

我怀疑这可能会描述您在Delphi版本中遇到的问题:

我不确定这是否有帮助...但我希望它能做到.至少有点:)

PS:你有什么特别的原因需要使用Com/ActiveX和/或TActiveForm吗?