3
我們正在使用COM Interop(C#)允許VB6應用程序將數據發送到服務器。一旦服務器接收到數據,託管代碼將引發一個DataSent事件。此事件僅在相關ID返回給原始呼叫者後觸發。大約有1%的時間,在完成最初發送數據的函數之前,我們遇到了VB6執行raise事件。使用VB6與COM Interop時出現意外事件行爲(C#)
使用下面的代碼:
' 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如何訪問Message Loop以知道在退出send_data()之前引發了DataSent事件?我們不調用DoEvents,VB6中的所有內容都是同步的。
在此先感謝您的幫助。
感謝您的回覆。我們看到毫秒內的時差。 – Randal 2010-03-26 17:18:50