Hi all,

I need help in a problem concerning COM/.NET interoperability in a
multithreaded application.
The application (written in C#) uses an external component which exposes
COM-based object model.
Let's say 'Item' is an object of the model, item has a __CComObject type.
Items are accessed via calls to the component like the follows:

....
   Item anItem =  externalObject.GetItem ("MyItem");
....

During startup a worker thread is running to collect some information about
items and store it in a hashtable (using items as the keys):

....
    Hashtable theCache = new Hashtable ();
    theCache [anItem] = <something>;
...

The information is then used from code executing in the UI thread:

...
   Item anItem =  externalObject.GetItem ("MyItem");
   <something> = theCache [anItem]; // Oops. This does not work
...

The problem is that, because UI thread lives in a STA and the worker thread
executes in another apartment,
the UI thread gets different wrapper than the worker thread, since items are
marshalled across apartments. I realize that this is normal behavior.
However, I need a way to identify items in a thread-independent fashion.
Items themselves do not have any properties which might serve as a reliable
unique identifiers.

So, the question is, how such problems are resolved? May be there is still a
way to get apartment-independent identifier of the object? I am not a COM
guru,
but I took a look at System.Runtime.InteropServices.Marshal class and found
nothing similar.

Any advices / references will be greatly appreciated. Thanks in advance.

Regards,
Dmitry Shaporenkov
mailto:[EMAIL PROTECTED]

===================================
This list is hosted by DevelopMentor╝  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to