本帖最后由 tzleo 于 2011-09-16 17:39:18 编辑

解决方案 »

  1.   

    如果没有消息循环,那应该只能使用类似内核对象(如event)的通知机制了。
      

  2.   

    多谢楼上两位,但是据我所知,event是用来同步线程的吧,而不是线程切换。或许我理解有误,能不能说的再详细一点,或者提供一个链接,谢谢
      

  3.   

    我跟踪过.net framework的consol程序,里面创建一个Dispatcher线程,发现.net可以在consol下做到线程切换,但是那段代码是在内核中的,所以我想知道.net是怎么做到的。
      

  4.   

    是的,但是这往往只是组件开发者一厢情愿,但是你永远不能强制使用者在接收到组件发出的事件后想干些什么事情。如果你的事件是等待回调结果的,那么如果你随便开线程的话玩玩等待你的就是死锁和不同步。这个就是为什么COM会有线程套间的概念。
      

  5.   

    那就通過Marshal/UnMarshal來传递COM指针.
      

  6.   

    所谓的套间、Marshal最终也都离不开窗口消息,全TMD用SendMessage来完成的,SendMessage用的就是事件,而且不止一个,发送通知是一个事件,接收结果又是一个,闭源的好处就在这里,你不知道它怎么工作的,怎么去破坏它?要破坏也不需要自己去瞎响应事件啊,拦截WM_USER消息就够了,这样就全破坏了,COM把自己都包装到WM_USER消息中了,可惜大家都看不懂,唯一的搞事方式就是不交给系统默认处理。