COM Interop - многопоточность в вызываемой оболочке COM - PullRequest
4 голосов
/ 07 апреля 2011

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

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

1 Ответ

2 голосов
/ 07 апреля 2011

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

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

<час />

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

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

...