R
Rob
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.
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.