Si crea su objeto STA COM en un hilo .NET STA, todas las llamadas a su objeto se agrupan en ese hilo.
Si crea su objeto STA COM en un hilo .NET MTA, el tiempo de ejecución creará un hilo STA y gestionará todas las llamadas a ese hilo.
Entonces, cuando su hilo (STA) existe, sus objetos COM son inaccesibles.
Una solución podría ser crear objetos en un nuevo hilo para el que pueda controlar la duración.
he hecho una cosa similar así:
using (ManualResetEventSlim mre = new ManualResetEventSlim(false))
{
Thread _STAThread = new Thread(new ThreadStart(() =>
{
globalComObject = new ComClass();
mre.Set();
try
{
Thread.CurrentThread.Join();
}
catch (ThreadAbortException)
{
}
}));
_STAThread.SetApartmentState(ApartmentState.STA);
_STAThread.IsBackground = true;
_STAThread.Start();
mre.Wait();
}
El código inicia un nuevo hilo, ajuste el apartamento a la STA y espera la creación de un objeto COM en ese hilo. El subproceso en sí se ejecuta hasta que se cierra la aplicación (IsBackground = true) o mata el subproceso explícitamente con Thread.Abort().
Pero tenga en cuenta que todas las llamadas a sus objetos COM se organizan y, por lo tanto, se ejecutan serializadas una tras otra en ese único hilo. Eso podría ser un gran cuello de botella en tu aplicación.
ASPCompat = true señala el tiempo de ejecución de ASP.NET, que está utilizando objetos STA COM y ejecuta así la página dentro de un hilo STA. de lo contrario, puede obtener una excepción o todos sus objetos COM se ejecutarán en el subproceso STA generado automáticamente compartido por todas las solicitudes en su página (consulte MSDN aquí: http://msdn.microsoft.com/en-us/library/zwk9h2kb(VS.80).aspx)
Esto significa que si uso ASPCompat y pongo COM Objetos en Sesión, ellos morirán al azar porque el hilo que los creó habrá terminado? –
Creo que no, porque ASP.NET usa un hilo de trabajo para manejar las solicitudes. Los hilos no "morirán" después de procesar una solicitud. Consulte estos artículos de la base de conocimiento en Microsoft declara que es posible almacenar objetos STA COM en estado de sesión pero recomienda que no lo haga: http://support.microsoft.com/kb/243543/en-us, http://support.microsoft .com/kb/243815/en-us – Jan