[英]Delphi - Thread not executing in ActiveX form - but does elsewhere
我有一個名為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/
它引用了您引用的同一篇文章:
我不確定這是否有幫助...但我希望它能做到。 至少有點:)
PS:你有什么特別的原因需要使用Com / ActiveX和/或TActiveForm嗎?
根據這篇文章: http : //edn.embarcadero.com/article/32756 Web瀏覽器不允許通過ActiveX進行線程化。 但是,當我將它放在C#應用程序中時,仍然無法解釋為什么它不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.