-
[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 객체를 사용시엔 런타임때 오류가 발생한다.
(위키피디아의 정확한 설명)
만약 Main 메소드에 STAThread 속성을 붙이지 않았으면, C#에서는, 멀티 스레드 어파트먼트(MTA: multithreaded apartment)가 되게 된다.
본론으로 들어가서, C#의 Main 메소드에 STAThread가 그래서 필요한가? 라고 하면, STA로만 구동이 되는 COM를 사용하는 경우 -> 필요하다.
COM을 직접 사용하는 것이 아니여도 .NET Framework의 일부의 기능을 COM을 사용하고 있기 때문에, 그러한 기능을 사용하는 경우는 반드시 STA로 할 필요가 있다고 한다.
- 이 내용을 찾아본 계기가 C#에서 스레드를 생성하여 사용하면 멀티 스레드가 되는것이 아닌가? 라는 생각을 했고, 그렇다면 [STAThread]가 이니라 [MTAThread]인 것 아닌가? 라고 생각했었다.
- 지금은 메인 스레드 입장에서 자신의 내부를 보았을 때 STA인지 MTA인지 구분인 것이고, 외부에서 생성된 다른 스레드와는 별개라고 이해하였다. 아직 개념이 잘 안서있기 때문에 더 찾아봐야 겠다.
300x250'C#' 카테고리의 다른 글
C# - using문 (0) 2022.01.24 C# - Application 클래스란? (0) 2022.01.24 C# - WindowForm user32를 활용한 메모장 스크린샷 프로그램 (0) 2022.01.22 C# - DLL 추가하기, DLL 사용하기, WindowForm과 Console창 같이 보기 (0) 2022.01.22 C# - WindowForm 기초(ToolBox, Properties, Event, Button, TextBox) (0) 2022.01.22