我正在创建的自定义控件需要在其客户端空间中绘制许多“项目”。调用 Invalidate() 将触发一个新的绘制周期,其中所有项目都将被重绘。
现在,当控件中有很多项并且发生很多导航时,需要优化;所以我需要触发一个只绘制一个或两个项目的绘制周期。我存储对这些项目的引用,以便绘制方法 (OnPaint) 知道它是“快速”的。
困难在于,在执行 OnPaint 时,很难知道是否同时进行了其他 Invalidate() 调用。在这种情况下,它应该做一个“正常”的、完整的油漆。
我确实使用了剪辑矩形。当然,我可以检查 OnPaint 中的剪辑矩形是否已成为整个客户矩形,这是调用 Invalidate() 的标志,但这不是 100% 安全的。我想到了其他类似的解决方案,但它们看起来很老套。
这个问题通常或最好的解决方法是什么?