Re: Single threaded class for COM interop

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: bruce barker (nospam_brubar_at_safeco.com)
Date: 07/13/04


Date: Tue, 13 Jul 2004 09:00:08 -0700

no, if a class is not thread safe, it has no way of enforcing it, it up to
the caller. the 3 methods you list are for ensuring the caller (a thread)
does not do a thread switch.

your solution is the correct one, except, that the stubs should only create
one STA thread, then switch to that thread to make the call, unless the com
object is completly stateless.

-- bruce (sqlwork.com)

"Rob" <robsomething@hotmail.com> wrote in message
news:ad1c30ac.0407130636.35f7bda@posting.google.com...
> Hi.
>
> I'm having difficulty calling a 3rd party COM object that must be
> called in the apartment (single) threaded model. As far as I know,
> there are 3 ways todo this:
>
> 1 - use "aspcompat=true" for aspx pages
> 2 - use [STAThread] attribute for windows/console applications
> 3 - use System.Thread.CurrentThread.ApartmentState =
> ApartmentState.STA
>
> The problem is that the COM object is only called through a business
> layer module. This business layer consists of a number of classes that
> encapsulate the calls to the COM object. Therefore, option 1 and 2 are
> not applicable and option 3 does not work since the threading model
> has already been defined even before the class initializer is called.
>
> One solution that I've come up with is calling a 'stub' method for
> each method in the business layer. This 'stub' will declare a new
> thread, set the apartment model to STA, then start the thread. This is
> tedious because every method will require a 'stub' and all parameters
> (in and out) must be handled through private class members. I can't
> imagine that this is the proper way of doing things.
>
> So, my question is: Is there a way to make the entire class
> single-threaded by default (similar to [STAThread] for a windows app)?
>
> Any help would be greatly appreciated.
>
> Rob.



Relevant Pages

  • Single threaded class for COM interop
    ... I'm having difficulty calling a 3rd party COM object that must be ... called in the apartment threaded model. ... This 'stub' will declare a new ... thread, set the apartment model to STA, then start the thread. ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: More static type fun.
    ... Kowalczyk wrote: ... > The call is written in the caller. ... > In ML you can stub only functions this way, but all functions using one stub. ... My ignorance is showing here -- I presume then that ML and Haskell have ...
    (comp.lang.lisp)
  • Re: More static type fun.
    ... The call is written in the caller. ... Stub replaces the body of the ... can even be given the correct type before it's implemented. ... > type-check. ...
    (comp.lang.lisp)