2010-03-26 43 views
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中的所有內容都是同步的。

在此先感謝您的幫助。

回答

1

我感覺COM事件的提升速度比方法調用返回VB6的結果快。在撥打LogData的兩個電話之間你看到了多少時差?

+0

感謝您的回覆。我們看到毫秒內的時差。 – Randal 2010-03-26 17:18:50