Дан некоторый COM-объект, реализованный во внешней библиотеке, имеющий некоторое событие. Моя программа написана на C# под .NET 3.5. Я полностью контролирую этот объект, решаю, где его создавать и т.д. Необходимо всего-ничего сделать так, чтобы мой обработчик этого события работал в другом потоке.
Я создаю новый фоновый поток, в нем создаю этот объект и подписываюсь на событие. Но когда оно срабатывает, то обработчик вызывается из основного потока приложения.
Почему так, ведь создаю я его в другом потоке? Есть ли тут специфика конкретно того, что это COM-объект или как он конкретно написан?
Следующий код на C# работает именно так, как мне нужно.
class Test
{
public event Action Do;
public void Raise() {
Do(); }
}
class Program
{
static void Main(string[] args)
{
var x = new Thread(Start) {Name = "Another thread", IsBackground = true};
x.Start();
}
static void Start()
{
var test = new Test();
test.Do += () => { Console.WriteLine(Thread.CurrentThread.Name); };
test.Raise();
}
}
А вот такой код уже нет:
class Program
{
static void Main(string[] args)
{
var x = new Thread(Start) {Name = "Another thread", IsBackground = true};
x.Start();
}
static void Start()
{
var test = new SomeComObject();
test.Do += () => { Console.WriteLine(Thread.CurrentThread.Name); };
test.Raise();
}
}
Подскажите: куда купать, что делать?