執行緒安全 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中文網其他相關文章!