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

问题描述 投票:3回答:1

我们正在使用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是否返回一个值,但是日志显示m_ManagedData_DataSent结束之前偶尔会调用send_data

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

感谢您的帮助。

c# com vb6 interop
1个回答
1
投票

我感觉到COM事件的引发速度快于方法调用被封送回VB6的结果。您对LogData的两次调用之间看到多少时间差?

© www.soinside.com 2019 - 2024. All rights reserved.