Delphi - Поток не выполняется в форме ActiveX, но работает где-то еще

У меня есть поток под названием 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;
5
задан RRUZ 29 October 2011 в 19:32
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: