【问题标题】:Unexpected Event Behavior When Using VB6 with COM Interop (C#)将 VB6 与 COM 互操作 (C#) 一起使用时的意外事件行为
【发布时间】:2011-02-01 05:22:57
【问题描述】:

我们使用 COM 互操作 (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 如何访问消息循环以知道在退出send_data() 之前引发了DataSent 事件?我们没有调用DoEvents,VB6 中的所有内容都是同步的。

提前感谢您的帮助。

【问题讨论】:

    标签: c# com vb6 interop


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我们看到的时间差在一毫秒内。
    猜你喜欢
    • 2011-07-02
    • 2010-11-12
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多