2012-04-04 40 views
0

這是應用程序的設計方法 - 我有一個COM服務器在某些情況下引發事件。 我有一個C#客戶端UI,應該處理這個C​​OM服務器引發的這些事件。在C#中處理COM回調客戶端

在我的C#客戶端中有一個代理,我將它傳遞給COM服務器,並在事件中回調。我有一個自定義的包裝,它將編組作爲函數指針編組。像這樣......

 Fxn1inCOMWrapper([In, MarshalAs(UnmanagedType.FunctionPtr)] Client.SetStatusDelegate StatusCallback); 

該回調機制起作用。 這裏的問題是,一旦我得到回調,我應該調用COM服務器中的另一個方法來調用進一步的處理。

我無法從C#回調方法對COM組件進行第二次函數調用,並且它破壞了COM中的堆棧並返回異常。 我猜這是這種情況,因爲回調不是創建COM對象和第一次調用的線程。是否有可能解決這個問題?

一個選項是在C#客戶端的事件回調中設置一個標誌。在主線程的計時器上,檢查標誌,如果是,則進行第二次調用。但肯定有一個更優雅的方式來做到這一點...任何人都可以幫忙嗎?

+1

它沒有任何與線程,該屬性沒有做任何事情。你需要更好地診斷出錯的原因。 COM支持事件,你可能想要使用它們。 – 2012-04-04 04:54:12

回答

0

嘗試更改Main()函數的線程屬性。例如,如果您有:

[STAThread] 
static void Main() 

將其更改爲:

[MTAThread] 
static void Main()