내보내기(0) 인쇄
모두 확장

Thread.ApartmentState 속성

업데이트: 2007년 11월

참고: 이 API는 이제 사용되지 않습니다. 또는 GetApartmentState()을(를) 사용할 수도 있습니다. 또는 SetApartmentState(ApartmentState)을(를) 사용할 수도 있습니다.

이 스레드의 아파트 상태를 가져오거나 설정합니다.

네임스페이스:  System.Threading
어셈블리:  mscorlib(mscorlib.dll)

[ObsoleteAttribute("The ApartmentState property has been deprecated.  Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", 
	false)]
public ApartmentState ApartmentState { get; set; }
/** @property */
/** @attribute ObsoleteAttribute("The ApartmentState property has been deprecated.  Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false) */
public ApartmentState get_ApartmentState()
/** @property */
/** @attribute ObsoleteAttribute("The ApartmentState property has been deprecated.  Use GetApartmentState, SetApartmentState or TrySetApartmentState instead.", false) */
public  void set_ApartmentState(ApartmentState value)

public function get ApartmentState () : ApartmentState
public function set ApartmentState (value : ApartmentState)

속성 값

형식: System.Threading.ApartmentState

ApartmentState 값 중 하나입니다. 초기 값은 Unknown입니다.

예외상황
ArgumentException

이 속성을 유효하지 않은 아파트 상태, 즉 단일 스레드 아파트(STA)나 다중 스레드 아파트(MTA) 이외의 아파트 상태로 설정하려고 시도한 경우

.NET Framework 버전 1.0 및 1.1에서 ApartmentState 속성은 스레드가 단일 스레드 아파트에서 실행될지 아니면 다중 스레드 아파트에서 실행될지를 표시합니다. 이 속성은 스레드가 Unstarted 또는 Running 스레드 상태일 때 설정할 수 있지만 하나의 스레드에 대해 한 번만 설정할 수 있습니다. 이 속성이 설정되어 있지 않으면 Unknown을 반환합니다.

중요:

.NET Framework 버전 2.0에서는 새 스레드가 시작되기 전에 해당 스레드의 아파트 상태가 설정되지 않았으면 이 스레드는 ApartmentState.MTA로 초기화됩니다. 기본 응용 프로그램 스레드는 기본적으로 ApartmentState.MTA로 초기화됩니다. 더 이상 코드의 첫 번째 줄에서 System.Threading.ApartmentState 속성을 설정하여 기본 응용 프로그램 스레드를 ApartmentState.STA로 설정할 수 없습니다. 대신 STAThreadAttribute를 사용합니다.

.NET Framework 버전 2.0에서는 /CLRTHREADATTRIBUTE(CLR 스레드 특성 설정) 링커 옵션을 사용하여 C++ 응용 프로그램의 COM 스레딩 모델을 지정할 수 있습니다.

다음 코드 예제에서는 스레드의 아파트 상태를 설정하는 방법을 보여 줍니다.

using System;
using System.Threading;

class ApartmentTest
{
    static void Main()
    {
        Thread newThread = 
            new Thread(new ThreadStart(ThreadMethod));
        newThread.SetApartmentState(ApartmentState.MTA);

        // The following line is ignored since 
        // ApartmentState can only be set once.
        newThread.SetApartmentState(ApartmentState.STA);

        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}", 
            newThread.ThreadState, newThread.ApartmentState);

        newThread.Start();

        // Wait for newThread to start and go to sleep.
        Thread.Sleep(300);
        try
        {
            // This causes an exception since newThread is sleeping.
            newThread.SetApartmentState(ApartmentState.STA);
        }
        catch(ThreadStateException stateException)
        {
            Console.WriteLine("\n{0} caught:\n" +
                "Thread is not in the Unstarted or Running state.", 
                stateException.GetType().Name);
            Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                newThread.ThreadState, newThread.GetApartmentState());
        }
    }

    static void ThreadMethod()
    {
        Thread.Sleep(1000);
    }
}


import System.*;
import System.Threading.*;
import System.Threading.Thread;    

class ApartmentTest
{
    public static void main(String[] args)
    {
        Thread newThread = new Thread(new ThreadStart(ThreadMethod));

        newThread.set_ApartmentState(ApartmentState.MTA);

        // The following line is ignored since 
        // ApartmentState can only be set once.
        newThread.set_ApartmentState(ApartmentState.STA);
        Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                        newThread.get_ThreadState(),
                        newThread.get_ApartmentState());
        newThread.Start();

        // Wait for newThread to start and go to sleep.
        Thread.Sleep(300);
        try {
            // This causes an exception since newThread is sleeping.
            newThread.set_ApartmentState(ApartmentState.STA);
        }
        catch (ThreadStateException stateException) {
            Console.WriteLine("\n{0} caught:\n" + 
                "Thread is not in the Unstarted or Running state.", 
                stateException.GetType().get_Name());
            Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
                newThread.get_ThreadState(),newThread.get_ApartmentState());
        }
    } //main

    static void ThreadMethod()
    {
        Thread.Sleep(1000);
    } //ThreadMethod
} //ApartmentTest


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

1.1, 1.0에서 지원
3.5에서 사용되지 않음(컴파일러 경고)
3.5 SP1에서 사용되지 않음(컴파일러 경고)
3.0에서 사용되지 않음(컴파일러 경고)
3.0 SP1에서 사용되지 않음(컴파일러 경고)
2.0에서 사용되지 않음(컴파일러 경고)
2.0 SP1에서 사용되지 않음(컴파일러 경고)

커뮤니티 추가 항목

추가
표시:
© 2014 Microsoft