본문 바로가기
젬스it

Dispatcher 구조 시각화

by 젬스컬쳐 캐리커처 2025. 7. 25.
반응형

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. 비동기 애니메이션처리

다음에…

반응형