Здравствуйте, Мизантроп, Вы писали:
М>Может быть, если Вы передаёте в свои потоки событийные интерфейсы без маршалинга. Но по идее оно должно проявляться на всех компьютерах. Правда тут есть некоторые нюансы, связанные с тем, работаете ли Вы с объектом напрямую или через прокси. В общем, в COM есть правило — между апартаментами интерфейсные ссылки должы передаваться только через маршалинг, и это требование необходимо неукоснительно соблюдать. То есть в некоторых случаях это можно обойти, но это чистой воды хак. Я могу рекомендовать воспользоваться Global Interface table (IGlobalInterfaceTable), очень удобно для внутрипроцессного маршалинга.
Про IGlobalInterfaceTable я в курсе. Я его использую. У меня генерируются события из внутреннего потока внутри компоненты. Это все работает если клиент загружает один экземпляр компонента. Все начинает падать, когда клиент пытается загрузить несколько экземпляров компонента. Так как у нас inproc-сервер, компонент — это dll и все находится в одном адресном пространстве клиента. Как только несколько экземпляров компонента начинают генерировать события одновременно, все падает. Я поставил синглетный мьютекс как раз в то место, чтобы предотвратить генерацию событий разными потоками одновременно. Сейчас разные потоки генерируют события поочередно.
Хотелось бы выяснить в чем проблема и решается ли она средствами COM.