WPF에서 사용하는 `Dispatcher` 구조는 UI 스레드에서 작업을 안전하고 순차적으로 처리하기 위한 핵심 메커니즘
아래에 시각적인 흐름으로 정리
---
## 🧩 Dispatcher 구조 전체 흐름도
```plaintext
┌────────────────────────────────────┐
│ UI Thread (Main Thread) │
│ ──────────────────────────────── │
│ │
│ Dispatcher │
│ ┌──────────────────────────────┐ │
│ │ Priority Queue (Tasks) │ │
│ │ ┌───────────────────────┐ │ │
│ │ │ DispatcherPriority │ │ │
│ │ │ ──────────────────── │ │ │
│ │ │ • Send │ │ │
│ │ │ • Inactive │ │ │
│ │ │ • Normal │ │ │
│ │ │ • Render │ │ │
│ │ │ • Background │ │ │
│ │ │ • ApplicationIdle │ │ │
│ │ │ • SystemIdle │ │ │
│ │ └───────────────────────┘ │ │
│ └──────────────────────────────┘ │
│ │
│ DispatcherTimer / Dispatcher.Invoke / BeginInvoke │
│ │
└────────────────────────────────────┘
↓
──────────────────────────────────────
Worker Threads (Background Tasks)
──────────────────────────────────────
```

---
## 🎯 핵심 구성 요소
### 1. `Dispatcher`
- WPF의 **UI 스레드 전용 작업 큐**
- 모든 UI 변경 작업은 여기서 실행되어야 안전함
### 2. `DispatcherPriority`
- 작업 실행 순서를 결정
- 예시 우선순위:
- `Send`: 즉시 실행
- `Normal`: 기본값 (자주 사용)
- `Render`: 화면 그리기 직전
- `ApplicationIdle`: 앱이 유휴 상태일 때
- `Background`: 후순위 작업
### 3. `Invoke()` vs `BeginInvoke()`
| 메서드 | 실행 방식 | 특징 |
|--------|------------|-------|
| `Invoke` | 동기적 | UI 스레드가 완료까지 기다림 |
| `BeginInvoke` | 비동기적 | UI 스레드가 기다리지 않음, 호출만 함 |
### 4. `DispatcherTimer`
- UI 스레드에서 일정 시간마다 작업을 실행하기 위한 타이머
- 타이머 콜백도 Dispatcher 큐에 들어감
---
## 🧠 Dispatcher의 핵심 철학
- **모든 UI 변경은 Dispatcher를 통해 실행된다**
- **우선순위에 따라 작업이 정리되고 순차적으로 처리된다**
- **멀티스레딩 환경에서도 UI 안정성을 보장한다**
---
`Dispatcher` 사용법을 더 구체적인 예제
예를 들면 백그라운드 작업 완료 후 UI 업데이트, 렌더 타이밍 최적화, 비동기 애니메이션 처리
1. 백그라운드 작업완료후 ui업데이트
2. 렌더타이밍 최적화
3. 비동기 애니메이션처리
다음에…
'젬스it' 카테고리의 다른 글
| Task.Delay() vs Thread.Sleep() — C#에서의 대기 처리 차이점 (0) | 2025.09.24 |
|---|---|
| Logitech MX Keys S 키보드 블루투스 연결 방법 (2) | 2025.08.26 |
| ie5에서 ixmldomdocument2 로 읽던거를 ie11에서는 xmldocument로 읽는데 해당값을 받으려면 어떻게 하나? (2) | 2025.06.13 |
| wpf 에서 ObservableObject 의 역할 (0) | 2025.04.08 |
| IT 프리랜서로 같은 직장에서 4년째 근무 중이라면 휴가일수는? (0) | 2025.03.24 |