Обнаружение маршалирования поперечной резьбы от COM RCW Objects в C #

Я работаю в большом многопоточке 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 прокси, чтобы сделать их доступными на высоком уровне.

Я не могу поверить, что это единственный ответ. Спасибо!

11
задан Scott B 31 August 2011 в 03:41
поделиться