我有一个包含 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/