[STAThread] 속성
Windows Presentation Foundation (WPF) 애플리케이션에서 사용되는 [STAThread] 속성은 Main Thread가 STA(Single-Threaded Apartment) 모델을 사용하도록 지정합니다.
STA 모델은 COM(Component Object Model)의 스레드 모델 중 하나로, 이 속성을 통해 WPF 애플리케이션이 COM 구성 요소와 호환되며 안전하게 접근할 수 있게 됩니다.
특히, UI 요소가 Single Thread에서 안전하게 접근되도록 보장하며, Multi Thread으로 인해 발생할 수 있는 문제들을 방지할 수 있습니다.
STA(Single-Threaded Apartment) 모델
STA 모델은 객체가 생성된 Thread에서만 해당 객체에 접근할 수 있도록 보장하는 Thread 모델입니다.
이 모델의 주요 특징은 다음과 같습니다:
- 모든 메서드 호출과 이벤트가 Single Thread에서 직렬화됩니다.
- Thread 간 동기화 문제를 줄여줍니다.
- 대부분의 UI 요소는 STA 모델을 사용합니다.
STA 모델의 장점
- Thread 안전성이 뛰어납니다.
- UI 컴포넌트와의 호환성이 좋습니다.
STA 모델의 단점
- 모든 작업이 단일 Thread에서 실행되므로 성능 저하가 발생할 수 있습니다.
예제 코드
using System;
using System.Windows;
using System.Threading;
namespace WPFSTAExample
{
public partial class App : Application
{
[STAThread]
public static void Main()
{
App app = new App();
MainWindow mainWindow = new MainWindow();
app.Run(mainWindow);
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Button button = new Button
{
Content = "Click me",
Width = 100,
Height = 30
};
button.Click += Button_Click;
this.Content = button;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// 이 메서드는 UI 스레드(STA)에서 실행됩니다.
MessageBox.Show("Button clicked!");
// 새 스레드에서 작업을 실행하려면:
Thread thread = new Thread(() =>
{
// 이 코드는 별도의 스레드에서 실행됩니다.
// UI 요소에 직접 접근하면 예외가 발생합니다.
// Dispatcher.Invoke를 사용하여 UI 스레드에서 코드를 실행해야 합니다.
this.Dispatcher.Invoke(() =>
{
MessageBox.Show("Hello from another thread!");
});
});
thread.Start();
}
}
}
결론
WPF 애플리케이션에서는 [STAThread] 속성을 통해 STA 모델을 사용하여 UI Thread에서의 안정성을 보장할 수 있습니다.
다만, 모든 작업이 Single Thread에서 실행되기 때문에 성능 문제가 발생할 수 있으므로, 적절한 비동기 처리를 통해 이러한 문제를 해결하는 것이 중요합니다.




