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)
我怀疑这可能会描述您在Delphi版本中遇到的问题:
http://soft-haus.com/blog/2009/02/10/codegear-borland-activex-threading-synchronization-problems/
它引用了您引用的同一篇文章:
我不确定这是否有帮助...但我希望它能做到.至少有点:)
PS:你有什么特别的原因需要使用Com/ActiveX和/或TActiveForm吗?