我的应用程序绑定了需要重绘屏幕的参数,某些参数导致重绘时间稍长。
我创建了一个界面来处理我的访问器,以便对于需要此参数的参数,我调用NotifyRedrawRequired()
,这最终会调用this.Refresh();
。
我的代码:
public delegate void MyFormDrawRequiredEventHandler(object sender, string callerName);
public MyForm() : Form {
public MyForm() {
InitializeComponent();
this.DoubleBuffered = true;
this.ResizeRedraw = true;
this.DrawRequired += MyForm_DrawRequired;
}
void MyForm_DrawRequired(object sender, string callerName) { this.Refresh(); }
[Category("Action")]
[Description("Fires when a redraw is required by the class.")]
public event MyFormDrawRequiredEventHandler DrawRequired;
protected virtual void NotifyDrawRequired([CallerMemberName] String callerName = "")
{
if (DrawRequired != null) { DrawRequired(this, callerName); }
}
private int blockSpacing;
public int BlockSpacing
{
get { return blockSpacing; }
set
{
if (blockSpacing != value)
{
blockSpacing = value;
NotifyDrawRequired();
}
}
}
/// Rest of the form code ...
}
避免让Refresh()
事件堆积的最佳方法是什么? 取消Refresh()
进程是一件简单的事情吗? / p>
答案 0 :(得分:0)
我花了太长时间才找到一个参考来刷新我的内存名称,但是这不是100%Winforms,出于某种原因,这曾经是针对原始Windows的半标准练习编程API。您可以suspend painting并通过发送WM_SETREDRAW
消息重新启动它。
当你这样做时,很大程度上取决于你的应用程序。我曾经使用计时器。在太短的时间内太多,请关闭它们。暂时没有,或者我们正在接近几个电影帧"如果没有更新,请重新开启。
如果Windows无法更新窗口,它会收集Invalidate
d矩形以便更新。