Взаимодействие COM — многопоточность в вызываемой оболочке COM

#.net #com-interop #ccw

#.net #взаимодействие com #ccw

Вопрос:

Возможно ли использовать многопоточность в сборке DLL-оболочки, вызываемой .NET COM?

Например, у меня есть библиотека DLL .NET assembly, которая предоставляет библиотеку .NET FTP для COM. Функции загрузки в настоящее время запрограммированы как функции «наилучшего использования». Я не использую события или возвращаемые значения, чтобы показать, успешно ли завершена загрузка, что я могу рассмотреть возможность реализации позже, если это необходимо. Могло бы .СЕТЕВАЯ сборка (в моем действительно ограниченном понимании) просто переносит эти процессы загрузки в другой поток? Предполагая, что это возможно, каков был бы результат этого, если бы хостинговое приложение было закрыто до завершения всех загрузок?

Ответ №1:

Да, в статье MSDN управляемая и неуправляемая потоковая передача объясняются детали. В частности:

Для обеспечения совместимости среда выполнения common language создает и инициализирует модуль при вызове COM-объекта. Управляемый поток может создавать и вводить однопоточный модуль (STA), содержащий только один поток, или многопоточный модуль (MTA), содержащий один или несколько потоков. Когда COM-модуль и сгенерированный потоком модуль совместимы, COM позволяет вызывающему потоку выполнять вызовы непосредственно к COM-объекту. Если компоненты несовместимы, COM создает совместимый компонент и выполняет маршалинг всех вызовов через прокси-сервер в новом компоненте.


каков был бы результат этого, если бы хостинговое приложение было закрыто до завершения всех загрузок?

Хороший вопрос. Как вы завершаете работу приложения? Если вы закрываете просто приложение с графическим интерфейсом, я думаю, что базовый процесс будет продолжать выполняться до тех пор, пока эти потоки активны. Я рекомендую вам создать тестовый проект, чтобы подтвердить поведение вашего приложения.