Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Thread.TrySetApartmentState (ApartmentState)

 

Publicado: octubre de 2016

Establece el estado del apartamento de un subproceso antes de iniciarse.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True,
	SelfAffectingThreading := True)>
Public Function TrySetApartmentState (
	state As ApartmentState
) As Boolean

Parámetros

state
Type: System.Threading.ApartmentState

Nuevo estado del apartamento.

Valor devuelto

Type: System.Boolean

true si se ha establecido el estado del apartamento; en caso contrario, false.

Exception Condition
ArgumentException

state no es un estado del apartamento válido.

ThreadStateException

Ya se inició el subproceso.

Los nuevos subprocesos se inicializan como ApartmentState.MTA Si no se ha establecido su estado de apartamento antes de que se inicien. Estado del apartamento se debe establecer antes de iniciar un subproceso.

System_CAPS_noteNota

El subproceso de aplicación principal se inicializa en ApartmentState.MTA de forma predeterminada. La única manera de establecer el estado de apartamento del subproceso principal de la aplicación para ApartmentState.STA es aplicar el STAThreadAttribute atributo al método de punto de entrada.

El TrySetApartmentState (método), junto con el GetApartmentState (método) y el SetApartmentState método, reemplaza el ApartmentState propiedad.

En el ejemplo de código siguiente se muestra el GetApartmentState, SetApartmentState, y TrySetApartmentState métodos. El ejemplo de código crea un subproceso. Antes de iniciar el subproceso, GetApartmentState muestra inicial ApartmentState.Unknown estado y SetApartmentState cambia el estado a ApartmentState.STA. El TrySetApartmentState a continuación, devuelve el método false al intentar cambiar el estado a ApartmentState.MTA porque el estado de apartamento ya está establecido. Si hubiera intentado la misma operación SetApartmentState, InvalidOperationException habría iniciado.

Cuando se haya iniciado el subproceso del TrySetApartmentState método se utiliza de nuevo. Esta vez produce ThreadStateException porque ya se ha iniciado el subproceso.

Imports System
Imports System.Threading

Module Example

    Sub Main()

        Dim t As New Thread(AddressOf ThreadProc)
        Console.WriteLine("Before setting apartment state: {0}", _
            t.GetApartmentState())

        t.SetApartmentState(ApartmentState.STA)
        Console.WriteLine("After setting apartment state: {0}", _
            t.GetApartmentState())

        Dim result As Boolean = _
            t.TrySetApartmentState(ApartmentState.MTA)
        Console.WriteLine("Try to change state: {0}", result)

        t.Start()

        Thread.Sleep(500)

        Try
            t.TrySetApartmentState(ApartmentState.STA)
        Catch ex As ThreadStateException
            Console.WriteLine("ThreadStateException occurs " & _
                "if apartment state is set after starting thread.")
        End Try

        t.Join()
    End Sub

    Sub ThreadProc()
        Thread.Sleep(2000)
    End Sub
End Module

' This code example produces the following output:
'
'Before setting apartment state: Unknown
'After setting apartment state: STA
'Try to change state: False
'ThreadStateException occurs if apartment state is set after starting thread.

.NET Framework
Disponible desde 2.0
Volver al principio
Mostrar: