我有一个线程,称为 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;
我怀疑这可能准确地描述了您在 Delphi 版本中遇到的情况:
-
http://soft-haus.com/blog/2009/02/10/codegear-borland-activex-threading-synchronization-problems/ http://soft-haus.com/blog/2009/02/10/codegear-borland-activex-threading-synchronization-problems/
其中引用了您引用的同一篇文章:
http://edn.embarcadero.com/article/32756 http://edn.embarcadero.com/article/32756
我不确定这是否有帮助……但我希望有帮助。至少有一点:)
附:
有什么特别的原因吗?have使用 Com/ActiveX 和/或 TActiveForm?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)