正在从.NET任务引发COM事件?

正在从.NET任务引发COM事件?,.net,multithreading,com,vb6,.net,Multithreading,Com,Vb6,我创建了一个暴露于COM的.NET类,并从VB6应用程序中使用。此.NET类运行一个任务,该任务引发一些事件。这些事件似乎是在VB6应用程序的主线程中引发的,并且一切正常。不过,我正试图确切地理解它是如何工作的。事件是否以某种方式被封送到主线程-通过.NET或COM?据我所知,如果正在使用STA线程,那么来自该线程外部的调用将使用Windows消息队列进行封送。当从VB6调用.NET/COM对象时,这是如何应用的?如果您的意思是.NET类使用await,那么它来自同一个线程。不,.NET类不使用

我创建了一个暴露于COM的.NET类,并从VB6应用程序中使用。此.NET类运行一个任务,该任务引发一些事件。这些事件似乎是在VB6应用程序的主线程中引发的,并且一切正常。不过,我正试图确切地理解它是如何工作的。事件是否以某种方式被封送到主线程-通过.NET或COM?据我所知,如果正在使用STA线程,那么来自该线程外部的调用将使用Windows消息队列进行封送。当从VB6调用.NET/COM对象时,这是如何应用的?

如果您的意思是.NET类使用
await
,那么它来自同一个线程。不,.NET类不使用await。它使用Task.Factory.StartNew,然后使用RaiseEvent从任务中引发事件。“一切正常”是STA线程背后的理念。VB6程序创建了该线程并订阅了该线程上的事件。COM基础设施提供的内置automagic可确保在该线程上触发事件以满足STA要求。与Control.Invoke()和Dispatcher.Invoke()相同的基本机制,您不需要帮助。