如果设置的属性很少,只调用一次Invalidate会有效吗?

时间:2013-12-27 16:30:14

标签: c# winforms gdi+

我有winforms控件可以在 OnPaint 方法中绘制复杂的UI。 在控件的每个属性中调用 Invalidate 方法。

public new Color BackColor
    {
        get
        {
            return backColor;
        }
        set
        {
            backColor= value;
            this.Invalidate();
        }
    }

如果更改了少量属性,仅调用无效方法会更有效吗?

例如:

    // remove from properties Invalidate call and call it once after set:
    this.BackColor=Red; 
    this.ForeColor=Blue; 
    this.BorderColor=Gray;

    this.Invalidate();

2 个答案:

答案 0 :(得分:1)

你只需要调用一次invalidate()。

答案 1 :(得分:1)

仅调用一次Invalidate并不是更有效,因为一旦使表单无效,在绘制窗口之前将忽略对Invalidate的额外调用。 (更有效的是不要不必要地调用Invalidate,但是不必要的呼叫的成本非常低)

如果您想提高效率,请查看如何使您的Paint处理程序不那么复杂。此外,如果只需要重绘部分显示,您可能只能使显示区域的一部分无效,并且您的Paint处理程序只能绘制其剪辑矩形内可见的内容,这可能会显着减少您的工作量更改属性时更新屏幕。