簡體   English   中英

Delphi - 線程不以ActiveX形式執行 - 但在其他地方執行

[英]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版本中遇到的問題:

我不確定這是否有幫助...但我希望它能做到。 至少有點:)

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

根據這篇文章: http//edn.embarcadero.com/article/32756 Web瀏覽器不允許通過ActiveX進行線程化。 但是,當我將它放在C#應用程序中時,仍然無法解釋為什么它不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM