在使用VB6与COM互操作(C#)时出现意外事件行为

3
我们正在使用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中的所有内容都是同步的。
感谢您的帮助。
1个回答

1
我感觉COM事件的引发速度比方法调用的结果返还到VB6更快。在两次调用LogData之间,您看到了多少时间差异?

感谢您的回复。我们发现时间差在毫秒级别内。 - Randal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接