[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에서 실행되기 때문에 성능 문제가 발생할 수 있으므로, 적절한 비동기 처리를 통해 이러한 문제를 해결하는 것이 중요합니다.