私はTAlertThreadというスレッドを持っています。スレッドは、イベントをトリガーすることによってその所有者と対話します。たとえば、スレッド内で特定のデータが使用可能な場合、いくつかの一時変数が設定され、Synchronize(UpdateAlert)が呼び出され、適切なイベントがトリガーされます。Delphi - スレッドはActiveXフォームで実行されていませんが、他の場所で実行されます
これで、スレッドはどの標準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;
明確にするために、私は、Executeプロシージャのように "Not working"がスレッドによって呼び出されないことを意味します。 –
Umm ..メソッドの宣言を実行する際に 'override'がありませんか?ちょうど推測 - 私はこれが起こるようなことは見たことがない。私のスレッドは、起動するメソッドの最初の行に常に到達します。 –
Oh - 'tpIdle' –