繁体   English   中英

缺少Winforms控件无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM