c# - 如果 SelectionChanged 事件触发得太快,WPF Treeview 会溢出吗?

标签 c# wpf treeview stack-overflow

我有一个包含 1000 个项目的 TreeView。当我选择一个项目时,TreeView 会触发一个事件,这样我就可以在我的 GUI 中更新一些东西。事件处理程序是非递归的,没有循环,但它确实需要一点时间才能完成,可能需要 100 毫秒。

如果我选择最上面的项目并使用向下箭头缓慢滚动项目,一切正常,但如果我按住箭头键,事件触发得太快并且我得到一个 stackoverflow 异常。

我考虑过在 TreeView 中放置一个计时器,这样 SelectionChanged 事件只能每 100 毫秒左右触发一次,但这看起来很老套。有解决这个问题的想法吗?

最佳答案

我在 winforms 上也看到过类似的情况。我见过人们实现的一种方法是使用延迟事件处理程序。这样它只有在指定的时间段内选择了所述项目后才会触发。

所以工作的方式是你有一个执行计时器的事件处理程序。每当触发 selectionchanged 事件时,计时器都会重置。您的计时器可能是 500 毫秒,因此如果在 500 毫秒后仍选择所选值,它将触发您需要处理的实际事件代码。

并不是说这是最好的方法,只是我在 Windows 窗体中看到的一种处理方式。

关于c# - 如果 SelectionChanged 事件触发得太快,WPF Treeview 会溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224896/

相关文章:

c# - 组合框数据绑定(bind)到 selectedvalue 事件

c++ - 发出 dataChanged 时,QML TreeView 项目不会更新

移动节点后 C# Treeview 不刷新

java - 将 TreeView 与多个嵌套的 Observable 列表同步

c# - 在 C# 上使用 CreateFile 返回 isInvalid = true

如果选择了数据网格行,则 WPF MVVM Light 启用按钮

c# - DatePicker 其他格式的默认日期

c# - 使用 Fluent API 而不是 InverseProperty 和导航属性

c# - Sharepoint OLE DB - 无法插入记录? "Field not updateable"错误

c# - 将字节数组从 PHP 发布到 .NET WCF 服务