首頁 >後端開發 >C++ >如何從後台執行緒安全地更新 WPF UI 元素?

如何從後台執行緒安全地更新 WPF UI 元素?

Susan Sarandon
Susan Sarandon原創
2025-01-11 21:11:42693瀏覽

How Can I Safely Update WPF UI Elements from a Background Thread?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn