将VB6与COM Interop一起使用时出现意外的事件行为(C#)

时间:2010-03-26 15:01:23

标签: c# com vb6 interop

我们使用COM Interop(C#)允许VB6应用程序将数据发送到服务器。一旦服务器收到数据,托管代码将引发DataSent事件。只有在将相关ID返回给原始调用者后才会触发此事件。

大约1%的时间,我们遇到VB6在完成最初发送数据的函数之前执行引发的事件。

使用以下代码:

' InteropTester.COMEvents is the C# object '
Dim WithEvents m_ManagedData as InteropTester.COMEvents

Private Sub send_data()

   Set m_ManagedData = new COMEvents
   Dim id as Integer
   ' send 5 to using the managed interop object '
   id = m_ManagedData.SendData(5)
   LogData "ID " & id & " was returned"
   m_correlationIds.Add id

End Sub

Private Sub m_ManagedData_DataSent(ByVal sender as Variant, ByVal id as Integer)
   LogData "Data was successfully sent to C#"
   ' check if the returned ID is in the m_correlationIds collection goes here'
End Sub   

我们可以在调用m_ManagedData.SendData(5)时验证id是否返回值,但是日志显示在send_data结束之前偶尔会调用m_ManagedData_DataSent。

在退出send_data()之前,VB6如何访问消息循环以了解DataSent事件是否已被引发?我们没有调用DoEvents,VB6中的所有内容都是同步的。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我感觉COM事件的引发速度比方法调用被编组回VB6的结果要快。您在LogData的两次调用之间看到了多少时差?