Thread.TrySetApartmentState(ApartmentState) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Stelt de appartementsstatus van een draad in voordat deze wordt gestart.
public:
bool TrySetApartmentState(System::Threading::ApartmentState state);
public bool TrySetApartmentState(System.Threading.ApartmentState state);
member this.TrySetApartmentState : System.Threading.ApartmentState -> bool
Public Function TrySetApartmentState (state As ApartmentState) As Boolean
Parameters
- state
- ApartmentState
De nieuwe appartementsstatus.
Retouren
true indien de staat van het appartement is ingesteld; anders, false.
Uitzonderingen
.NET Core en .NET 5+ alleen: in alle gevallen op macOS en Linux.
state is geen geldige appartementsstatus.
De thread is gestart en is beëindigd, of de aanroep wordt niet uitgevoerd vanuit de context van de thread terwijl de thread wordt uitgevoerd.
Voorbeelden
In het volgende codevoorbeeld ziet u de GetApartmentState, SetApartmentStateen TrySetApartmentState methoden. In het codevoorbeeld wordt een thread gemaakt. Voordat de thread wordt gestart, GetApartmentState geeft u de initiële ApartmentState.Unknown status weer en SetApartmentState wijzigt u de status in ApartmentState.STA. De TrySetApartmentState methode retourneert false vervolgens wanneer wordt geprobeerd de status ApartmentState.MTA te wijzigen in omdat de appartementsstatus al is ingesteld. Als dezelfde bewerking met was geprobeerd SetApartmentState, InvalidOperationException zou zijn gegooid.
Nadat de thread is gestart, wordt de TrySetApartmentState methode opnieuw gebruikt. Deze keer wordt het gegooid ThreadStateException omdat de thread al is gestart.
using System;
using System.Threading;
class Example
{
public static void Main()
{
Thread t = new Thread(ThreadProc);
Console.WriteLine("Before setting apartment state: {0}",
t.GetApartmentState());
t.SetApartmentState(ApartmentState.STA);
Console.WriteLine("After setting apartment state: {0}",
t.GetApartmentState());
bool result = t.TrySetApartmentState(ApartmentState.MTA);
Console.WriteLine("Try to change state: {0}", result);
t.Start();
Thread.Sleep(500);
try
{
t.TrySetApartmentState(ApartmentState.STA);
}
catch (ThreadStateException)
{
Console.WriteLine("ThreadStateException occurs " +
"if apartment state is set after starting thread.");
}
t.Join();
}
public static void ThreadProc()
{
Thread.Sleep(2000);
}
}
/* 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.
*/
open System.Threading
let threadProc () = Thread.Sleep 2000
let t = Thread threadProc
printfn $"Before setting apartment state: {t.GetApartmentState()}"
t.SetApartmentState ApartmentState.STA
printfn $"After setting apartment state: {t.GetApartmentState()}"
let result = t.TrySetApartmentState ApartmentState.MTA
printfn $"Try to change state: {result}"
t.Start()
Thread.Sleep 500
try
t.TrySetApartmentState ApartmentState.STA |> ignore
with :? ThreadStateException ->
printfn "ThreadStateException occurs if apartment state is set after starting thread."
t.Join()
// 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.
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.
Opmerkingen
Nieuwe threads worden geïnitialiseerd alsof ApartmentState.MTA hun appartementsstatus niet is ingesteld voordat ze worden gestart. Appartementsstatus moet worden ingesteld voordat een draad wordt gestart.
Note
De belangrijkste toepassingsthread wordt standaard geïnitialiseerd ApartmentState.MTA . De enige manier om de appartementsstatus van de hoofdtoepassingsthread ApartmentState.STA in te stellen, is door het STAThreadAttribute kenmerk toe te passen op de ingangsmethode.
De TrySetApartmentState methode vervangt de eigenschap, samen met de GetApartmentState methode en de SetApartmentStateApartmentState methode.