在 WPF 中安全存取 UI(主)執行緒
在 WPF 應用程式中,從非 UI 執行緒(例如後台執行緒)與 UI 執行緒互動可能會導致異常和崩潰。這是因為 UI 執行緒有一個調度程序,它管理 UI 的更新並確保執行緒安全。
問題:
考慮以下程式碼,程式碼在修改日誌檔案時更新 DataGrid:
<code class="language-c#">private void watcher_Changed(object sender, FileSystemEventArgs e) { if (File.Exists(syslogPath)) { ... DGAddRow(crp.Protocol, ft); } }</code>
DGAddRow 方法會為 DataGrid 新增一行,這必須在 UI 執行緒上完成。但是,由於 watcher_Changed 在後台執行緒上執行,它嘗試直接修改 UI,從而導致異常。
解:
要安全地存取 UI 線程,請使用 Application 或任何 UIElement 的 Dispatcher.Invoke 方法。此方法允許您在 UI 執行緒上執行程式碼。
<code class="language-c#">Application.Current.Dispatcher.Invoke(new Action(() => { DGAddRow(crp.Protocol, ft); }));</code>
透過使用 Dispatcher.Invoke,更新 UI 的程式碼將在主執行緒上執行,從而避免潛在的執行緒問題。
以上是如何從後台執行緒安全地更新 WPF UI 元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!