2011-10-28 14 views
5

Tengo un hilo, llamado TAlertThread. El hilo interactúa con su propietario activando eventos. Por ejemplo, cuando ciertos datos están disponibles dentro del hilo, establece algunas variables y llamadas temporales Sincronizar (UpdateAlert) que a su vez desencadena el evento apropiado.Delphi - El hilo no se ejecuta en forma ActiveX - pero lo hace en otro lugar

Ahora el hilo funciona perfectamente en cualquier aplicación de Windows estándar. Mi problema es cuando coloco ese hilo dentro de un formulario ActiveX (TActiveForm). El control ActiveX (también conocido como objeto COM) se integra dentro de un gadget de escritorio de Windows (a través de HTML/Javascript). También tengo experiencia con esto, el gadget no es el problema. El componente ActiveX funciona bien en su destino, excepto que el hilo nunca se ejecuta. Incluso se está llamando EXACTAMENTE de la misma manera que lo llamé desde la aplicación.

¿Existe alguna limitación con ActiveX para bloquear los hilos de ejecución? No lo creo, porque otras cosas que requieren subprocesos internos (como TADOConnection) funcionan. De hecho, estoy llamando apropiadamente CoInitialize y CoUninitialize apropiadamente. De nuevo, funciona perfecto en una aplicación, pero no funciona en absoluto en ActiveX.

Así es como puedo llamar a este hilo ...

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

Para aclarar, me refiero a "No funciona", ya que en el procedimiento Ejecutar nunca se llama por el hilo. –

+0

Umm ... ¿falta 'anular' la declaración del método de ejecución? Solo una suposición: nunca había visto que sucediera algo así. Mis hilos siempre alcanzan la primera línea del método de ejecución antes de explotar. –

+0

Oh - 'tpIdle'. Trate de subir eso a tpNormal, solo por ahora ... –

Respuesta

7

Sospecho que esto podría describir exactamente lo que está experimentando en su versión de Delphi:

No estoy seguro de si eso ayuda ... pero espero que sí. Al menos un poco :)

PS: ¿Hay alguna razón en particular que tiene utilizar Com/ActiveX y/o TActiveForm?

+1

+1 Estos artículos explican los problemas a los que aludía en los comentarios. –

+0

Mi razón particular fue porque A) Delphi es mi idioma principal, B) el producto debe estar en un gadget, C) Delphi admite crear fácilmente formularios ActiveX, y D) PODÍA usar AJAX en este gadget, pero no quiero implementar un Servidor HTTP para hacerlo. Este control ActiveX se conecta directamente a una base de datos SQL. Puede que termine abandonando la idea de hacer un Gadget y en su lugar crear una aplicación de bandeja (oculta hasta que sea necesario). El objetivo es proporcionar alertas/notificaciones al usuario para nuestro software, cuando el software no se está ejecutando. El software usa la base de datos SQL, y JavaScript no se puede conectar a SQL. –

+0

Quizás su control ActiveX tampoco se pueda comunicar con la base de datos SQL. Si su producto es remoto, y si hay uno o más firewalls entre su cliente y el servidor SQL de su compañía sobre los cuales no tiene control, entonces usted es SOL. P: ¿Realmente necesita TActiveForm? (De acuerdo con su pregunta original). P: ¿Realmente necesitas SQL Server? Y si es así, ¿puede ser un servidor SQL * local * (incrustado), que está literalmente instalado en el escritorio de su cliente (y no necesita comunicarse con nada más)? – paulsm4

0

De acuerdo con este artículo aquí: navegadores web http://edn.embarcadero.com/article/32756 no permiten roscar a través de ActiveX. Sin embargo, eso todavía no explica por qué no funciona cuando lo puse en una aplicación C#.

Cuestiones relacionadas