首页 >后端开发 >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