2011-10-28 16 views
5

私は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; 
+0

明確にするために、私は、Executeプロシージャのように "Not working"がスレッドによって呼び出されないことを意味します。 –

+0

Umm ..メソッドの宣言を実行する際に 'override'がありませんか?ちょうど推測 - 私はこれが起こるようなことは見たことがない。私のスレッドは、起動するメソッドの最初の行に常に到達します。 –

+0

Oh - 'tpIdle' –

答えて

7

私は、これはあなたがデルファイのバージョンで経験している正確に何を記述する可能性が疑われる:

  • http://edn.embarcadero.com/article/32756

  • :あなたが引用した同じ記事を参照し

    それが助けるかどうかは分かりませんが、私はそれが願っています。少なくとも少しは:)

    PS: には、Com/ActiveXやTActiveFormを使用するのに、がありますか?

    +1

    +1これらの記事は、私がコメントで言及した問題を説明しています。 –

    +0

    私の特別な理由は、A)Delphiが私の主要言語である、B)製品がGadgetになければならない、C)DelphiがActiveXフォームを簡単に作成できること、D)Ajaxをこのガジェットで使用することができます。これを行うには、HTTPサーバーを使用します。このActiveXコントロールは、SQLデータベースに直接接続します。私は、ガジェットを作って代わりにトレイアプリケーション(必要になるまで隠されている)を作る考えを放棄するかもしれません。目的は、ソフトウェアが実行されていないときに、当社のソフトウェアのアラート/通知をユーザーに提供することです。ソフトウェアはSQLデータベースを使用し、JavaScriptはSQLに接続できません。 –

    +0

    ActiveXコントロールがSQLデータベースと通信できないことがあります。あなたの製品がリモートであり、顧客と会社のSQL Serverの間に1つ以上のファイアウォールがあり、制御できない場合、あなたはSOLです。 Q:TActiveFormが本当に必要ですか? Q:SQLサーバーが本当に必要ですか?もしそうなら、文字通りお客様のデスクトップにインストールされている(そして他のものと通信する必要はありません)*ローカル*(埋め込み)SQLサーバーですか? – paulsm4

    0

    です:http://edn.embarcadero.com/article/32756 Webブラウザは、ActiveX経由でスレッドはできません。しかし、それはまだ私がC#アプリケーションに入れてもうまくいかない理由を説明していません。

    関連する問題