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



我有一个线程,叫做TAlertThread。线程通过触发事件与其所有者进行交互。例如,当某些数据在线程中可用时,它设置一些临时变量并调用Synchronize(UpdateAlert),从而触发适当的事件。

现在这个线程在任何标准的windows应用程序中都可以完美地工作。我的问题是,当我把线程内的ActiveX形式(战术形式)。ActiveX控件(又名COM对象)然后嵌入到Windows桌面小工具中(通过HTML/Javascript)。我也有过这样的经历,小工具不是问题。ActiveX组件在其目标中工作良好,只是线程永远不会执行。它被调用的方式和我在App中调用它的方式完全一样。

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

我怀疑这可能正是您在您的Delphi版本中所经历的:

    http://soft-haus.com/blog/2009/02/10/codegear-borland-activex-threading-synchronization-problems/
  • 引用了你引用的同一篇文章:

  • http://edn.embarcadero.com/article/32756

我不确定这是否有帮助…但我希望它能。至少有一点:)

PS:有什么特别的原因,你使用com activex和/或战术形式?

根据这篇文章:http://edn.embarcadero.com/article/32756 web浏览器不允许通过ActiveX线程。然而,这仍然不能解释为什么它不能工作,当我把它放在一个c#应用程序。

相关内容

  • 没有找到相关文章

最新更新