Обработка события в другом потоке
От: sbos Россия  
Дата: 25.03.10 12:09
Оценка:
Дан некоторый 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();
        }
    }


Подскажите: куда купать, что делать?
com c# .net события потоки
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.