Re: Service hangs when accessing ActiveX control



On Wed, 14 Sep 2005 18:11:36 +0200, "Willy Denoyette [MVP]"
<willy.denoyette@xxxxxxxxxx> wrote:

> The STAThread attribute is ignored on Main in a service, Service threads run
> in an MTA by default, if this is not what you want, you have to create your
> own STA thread.

But observation indicates the opposite.

Not specifying any attribute or specifying it as STA results in the same
behavior. Specifing it as MTA is different, in that it causes a
ThreadStateException when the service is started - probably because the COM
interface checks if it is running in STA.

I can only conclude from that, that the attribute is not ignored in a
service and the default is STAThread.

VS.Net *does* explicitly put <MTAThread()> in the declaration (which I
removed because I was using COM), and maybe it does so because it has to be
that way for a service, but that's not the same as ignoring it.


> > Just to see if there's a difference I changed it into <MTAThread>.
> > That causes a ThreadStateException when the service is started, so it's
> > not
> > like the <STAThread> was ignored (which it would be if there was no COM
> > interop).
> >
> Sure there is no difference because ... see above.
>
> >
> > So I guess I'll have to port the control's code to a managed dll.
> > I've already had to do that with another piece of code in another
> > application, but this time it doesn't look as if it will be simple, and
> > time is pressing :(
>
> Won't help you, Controls in .NET are UI elements and have the (almost) same
> requirements as AX controls.

I wouldn't make it a control, but a simple class that exposes the same
properties, methods and events (it has no UI elements, in that respect it
behaves like the MS Winsock control among others).
.



Relevant Pages

  • Re: STAThread vs non STAThread framework
    ... > bothered to put the STAThread attribute on them. ... A couple of the Windows Forms controls are simple wrappers around ActiveX ... initialize the thread to enter the MTA whenever you call into COM for the ... that the v2 SP1 CLR initializes the thread to enter the MTA (if not marked ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: STAThread vs non STAThread framework
    ... bothered to put the STAThread attribute on them. ... A couple of the Windows Forms controls are simple wrappers around ActiveX ... Such controls need a *pumping* STA thread to run on. ... initialize the thread to enter the MTA whenever you call into COM for the ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Can you decrypt this?
    ... Allahdad, as well as sizes democratic and academic, controls ... with regard to it, specifying for instance. ...
    (sci.crypt)
  • Re: STAThread vs non STAThread framework
    ... A couple of the Windows Forms controls are simple wrappers around ActiveX COM controls, notably all the "Dialog Controls" are AX control wrappers, one of them being the OpenFileDialog as used by the OP. ... Now, if you don't initialize your UI thread to enter an STA, the CLR will initialize the thread to enter the MTA whenever you call into COM for the first time, that is when you create an instance of say OpenFileDialog. ... STA thread created by COM hosting the FileDialog AX control. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Service hangs when accessing ActiveX control
    ... >> STA thread, but again, this is not something I strongly advise ... The STAThread attribute is ignored on Main in a service, ... > So I guess I'll have to port the control's code to a managed dll. ... Controls in .NET are UI elements and have the same ...
    (microsoft.public.dotnet.framework.interop)