Re: Single threaded class for COM interop
From: bruce barker (nospam_brubar_at_safeco.com)
Date: 07/13/04
- Next message: Derek Martin: "Re: Problem Opening ASP.NET 1.1 Solutions"
- Previous message: Matt Tapia: "running procedure at desktop not iis"
- In reply to: Rob: "Single threaded class for COM interop"
- Next in thread: Rob: "Re: Single threaded class for COM interop"
- Reply: Rob: "Re: Single threaded class for COM interop"
- Messages sorted by: [ date ] [ thread ]
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.
- Next message: Derek Martin: "Re: Problem Opening ASP.NET 1.1 Solutions"
- Previous message: Matt Tapia: "running procedure at desktop not iis"
- In reply to: Rob: "Single threaded class for COM interop"
- Next in thread: Rob: "Re: Single threaded class for COM interop"
- Reply: Rob: "Re: Single threaded class for COM interop"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|