ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [STAThread] 란?
    C# 2022. 1. 24. 09:52
    반응형

    [STAThread]

    해당 메서드가 STA (Single Threaded Arpartment) Thread모델로 실행된다는 것으로 만약 이를 지우면 윈도우 프로그램에 문제가 생기는 경우가 있다.

     

     

    인터넷에 나와있는 설명은

     

    어플리케이션의 COM 스레드모델이 단일스레드어파트먼트(STA: Single-Threaded Apartment)인 것

     

    라고 설명하였다.

     

    일단 여기서 COM이 무엇인지 모르겠어서 찾아보면,

     

     

     

    - Component Object Model 의 약자

    - 현재는 .net 프레임워크로 지위가 넘어가는 상황

    - com 형식이란 com 객체를 말한다.

    - .net은 기본적으로 MTA(멀티스레드어파트먼트)로 동작한다.

    - 그런데 전통적으로 com 객체는 STAThread 기반이어서 이를 명시해줘야 한다.

    - 만약 명시하지 않고 단일쓰레드아파트먼트 기반인 com 객체를 사용시엔 런타임때 오류가 발생한다.

    (위키피디아의 정확한 설명)

    https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8_%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8_%EB%AA%A8%EB%8D%B8

     

     

     

    만약 Main 메소드에 STAThread 속성을 붙이지 않았으면, C#에서는, 멀티 스레드 어파트먼트(MTA: multithreaded apartment)가 되게 된다.

     

     

    본론으로 들어가서, C#의 Main 메소드에 STAThread가 그래서 필요한가? 라고 하면, STA로만 구동이 되는 COM를 사용하는 경우 -> 필요하다.

     

    COM을 직접 사용하는 것이 아니여도 .NET Framework의 일부의 기능을 COM을 사용하고 있기 때문에, 그러한 기능을 사용하는 경우는 반드시 STA로 할 필요가 있다고 한다.

     

     

     

     

     

    - 이 내용을 찾아본 계기가 C#에서 스레드를 생성하여 사용하면 멀티 스레드가 되는것이 아닌가? 라는 생각을 했고, 그렇다면 [STAThread]가 이니라 [MTAThread]인 것 아닌가? 라고 생각했었다.

     

    - 지금은 메인 스레드 입장에서 자신의 내부를 보았을 때 STA인지 MTA인지 구분인 것이고, 외부에서 생성된 다른 스레드와는 별개라고 이해하였다. 아직  개념이 잘 안서있기 때문에 더 찾아봐야 겠다.

    300x250

    댓글

Designed by Tistory.