[英]Starvation of Winforms control invalidation
我有两个图形WinForms控件实例。 图形由DirectX渲染,并且可能包含动画内容。
我通过以下方式开始实施持续渲染的内容:
public override void OnPaint(...)
{
base.OnPaint(...);
// Render scene
this.Invalidate();
}
除了CPU使用率高之外,此方法还会导致其他控件的无效性失效:一个控件一次又一次地重新呈现,其他控件等待CPU执行其无效请求,这种情况永远不会发生(除非以某种方式强制执行它)窗口大小调整)。
因此,我删除了“ this.Invalidate()”调用,仅在需要刷新时才调用它。 当不显示动画时,它确实解决了问题,但是,如果两个控件都显示动画内容,问题将再次出现。
我考虑过在一个集中式管理器中管理应用程序中的所有控件,这将“安排”无效调用的循环。 但是,我对在一个集中的位置了解应用程序中所有控件的需求感到不满意,并且我不确定这是否是解决问题的正确方法。
有没有解决此问题的标准方法?
您不会在绘画事件期间Invalidate
。 那将导致另一个绘画事件,一次又一次,一次又一次。 您想在数据更改时Invalidate
,并且也可以仅使区域Invalidate
以最大程度地减少重绘。
对于动画,您将要根据您的帧频调用Invalidate
。 您可以使用Timer
或其他某种机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.