스레드로부터 안전한 WPF UI 업데이트: 실용 가이드
WPF 애플리케이션은 백그라운드 스레드에서 UI 업데이트를 주의 깊게 처리해야 합니다. 백그라운드 스레드에서 UI 요소에 직접 액세스하는 것은 안전하지 않으며 애플리케이션이 불안정해지거나 충돌이 발생할 수 있습니다. 이는 UI 요소가 기본적으로 기본 애플리케이션 스레드에 바인딩되어 있기 때문입니다.
파일 시스템 감시자가 로그 파일 항목으로 데이터 그리드를 업데이트하는 시나리오를 고려해 보겠습니다. 백그라운드 스레드의 감시자 이벤트 핸들러 내에서 새 행을 직접 추가(예: dataGridRows.Add(ds)
)하려는 시도는 올바르지 않습니다.
해결책은 Dispatcher
클래스를 사용하는 것입니다. Dispatcher
는 코드 실행을 메인 스레드로 마샬링하여 스레드 안전성을 보장하는 메커니즘을 제공합니다. 여기서는 Dispatcher.Invoke
방법이 핵심입니다.
데이터 그리드를 안전하게 업데이트하기 위해 watcher_Changed
이벤트 핸들러를 수정하는 방법은 다음과 같습니다.
<code class="language-csharp">private void watcher_Changed(object sender, FileSystemEventArgs e) { if (File.Exists(syslogPath)) { string line = GetLine(syslogPath, currentLine); foreach (CommRuleParser crp in crpList) { FunctionType ft = new FunctionType(); if (crp.ParseLine(line, out ft)) { Application.Current.Dispatcher.Invoke(() => DGAddRow(crp.Protocol, ft)); } } currentLine++; } else { MessageBox.Show(UIConstant.COMM_SYSLOG_NON_EXIST_WARNING); } }</code>
Application.Current.Dispatcher.Invoke
을 사용하면 DGAddRow
메서드가 메인 스레드에서 실행됩니다. 이는 데이터 그리드에 대한 안전한 액세스를 보장하고 스레딩 충돌을 방지합니다. 이 접근 방식을 사용하면 모든 UI 업데이트가 올바르게 처리되고 잠재적인 충돌이나 예측할 수 없는 동작을 방지할 수 있습니다.
위 내용은 백그라운드 스레드에서 WPF UI를 안전하게 업데이트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!