Мы используем COM-Interop (C#), чтобы приложение VB6 могло отправлять данные на сервер. После того, как сервер получит данные, управляемый код вызовет событие DataSent. Это событие запускается только после того, как идентификатор корреляции возвращается исходному абоненту.Неожиданное поведение при использовании VB6 с COM-взаимодействием (C#)
Около 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), но журналы затем показывают, что m_ManagedData_DataSent иногда вызывается перед send_data заканчивается.
Как можно VB6 получить доступ к Message Loop, чтобы узнать, что событие DataSent было поднято перед выходом send_data()? Мы не называем DoEvents, и все в VB6 синхронно.
Заранее за вашу помощь.
Спасибо за ответ. Мы видим разницу во времени в течение миллисекунды. – Randal