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