Я работаю в большом многопоточке C # приложения для обработки приложений COM Interop. Другие разработчики, и у меня есть достаточная возможность случайно позвонить однопоточной квартиры (STA) COM объекты из потоков MTA, а из потоков STA они не были созданы. Производительность вязкая, а маршаллирование поперечной резьбы является главным подозрением.
Есть хороший метод для тестирования на перекрестную квартиру маршалинг? Даже лучше, есть ли метод защиты защиты для проверки того, что данный COM-объект принадлежит к квартире этой темы?
Самое близкое, которое я пришел, является утверждением, которое является утверждением, расположенным в соответствии с подозрительным кодом:
Debug.Assert(Thread.CurrentThread.GetApartmentState() == ApartmentState.STA);
suspiciousComInterface.SomeMethod();
, пока это предупреждает нас, если Наши Flain Worker
Темы вызывают объекты STA, я специально обеспокоен тем, что потоки STA используются с использованием объектов COM Runtime Callable (RCW), которые были созданы в другом потоке STA.
Один онлайн-источник предположил, что это невозможно ( http://www.pcreview.co.uk/forums/detecting-cross-apartment-com-calls-t2450589.html ), что CLR скрывает слишком много объектов COM прокси, чтобы сделать их доступными на высоком уровне.
Я не могу поверить, что это единственный ответ. Спасибо!