gpt4 book ai didi

c# - 将 VB6 与 COM Interop (C#) 结合使用时的意外事件行为

转载 作者:行者123 更新时间:2023-11-30 18:09:18 25 4
gpt4 key购买 nike

我们正在使用 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 怎么可能访问消息循环以知道在退出 send_data() 之前引发了 DataSent 事件?我们没有调用 DoEvents 并且 VB6 中的所有内容都是同步的。

预先感谢您的帮助。

最佳答案

我感觉 COM 事件的引发速度快于方法调用的结果被编码(marshal)到 VB6 的速度。您看到对 LogData 的两次调用之间有多少时间差异?

关于c# - 将 VB6 与 COM Interop (C#) 结合使用时的意外事件行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com