Многопоточность, вызовы com+ с обменом сообщениями SendMessage

У меня есть приложение, которое создает поток, который взаимодействует с основным пользовательским интерфейсом через сообщения Windows. Он просто отправляет сообщение в основной поток приложения и получает статус.

Таким образом я показываю модальные окна и делаю другие вещи.

Проблема в том, что мне нужно отобразить форму, которая делает вызов com+ серверу. Таким образом, я получаю ошибку OLE 8001010D: исходящий вызов не может быть выполнен, так как приложение отправляет входной синхронный вызов.

Я думаю, это происходит из-за того, что используется первичный SendMessage, а для вызовов com+ требуется обмен сообщениями Windows для выполнения своих задач.

В любом случае, в delphi я не могу отобразить форму из потока, но как мне обойти эту проблему...?

Спасибо

РЕДАКТИРОВАТЬ:

  1. MAIN(UI) 2. ПОТОК

A. Поток(2) отправляет сообщение в основной поток (1) B. Основной поток (1) получает сообщение и, прежде чем позволить ему вернуться в поток он отображает окно. C. Модальное окно в основном потоке хочет сделать вызов com+, возникает вышеуказанная ошибка.


  1. В каком потоке находится модальное окно? 2. Из какого потока идет COM-вызов? 3. В каком потоке был создан COM-объект? 4. Инициализирован ли фоновый поток с помощью STA? 5. Отображается ли модальная форма из обработчика SendMessage? – Роман Р. 2 минуты назад

    1. MAIN
    2. MAIN
    3. MAIN
    4. CoInitializeEx(nil, COINIT_MULTITHREADED);
    5. Да.
6
задан user740144 19 March 2012 в 12:05
поделиться