延迟绘制WindowsFormsHost?

时间:2011-03-17 21:21:08

标签: c# wpf winforms

有没有办法延迟绘制WindowsFormsHost?它托管在WPF中。

它托管一个COM对象,它是一个ESRI ArcEngine AxTocControl。在视觉上它看起来像一个目录选项卡。

我正从目录中删除多个对象,并在一个函数中添加不同的对象。

当我删除一个对象时,TOC控件闪烁并移除和对象,然后我添加一个对象,它会闪烁并添加一个对象。由于我正在添加和删除20个对象,因此它闪烁了20次。我想延迟绘图 - 完成所有操作 - 然后恢复绘图 - 希望我只有1或2次闪烁/闪烁。

总而言之,是否有一个函数或技术(我不关心它是多么hacky)延迟绘制WindowsFormHost - 让一些东西执行 - 然后恢复绘图?

3 个答案:

答案 0 :(得分:5)

好吧,您可以为此特定方案创建自己的WindowsFormsHost子类,并覆盖WndProc。从那里开始,只要“抑制更新”条件成立,您就可以默默地忽略(通过不调用base.WndProc)所有drawing-related messages

您可以按照自己喜欢的方式实施的条件,例如:在您的类中设置一个公共PausePainting() / ResumePainting()方法,用于设置布尔字段。

你还需要记得在重绘时调用ResumePainting(),因为您不希望您的控件从不更新。

最后它不会像A-B-C那么简单,但这个概念是合理的,所以它应该可以解决。

答案 1 :(得分:0)

您可以使用Thread.Sleep(0)来引入延迟。

答案 2 :(得分:0)

您可以尝试处理所有内容,将它们逐个添加到列表中,然后一次添加整个列表。

myWpfControl.Clear();
List<EsriModel> items = new List<EsriModel>();
// Code to populate your items
myWpfControl.AddRange(items.ToArray());

可能就这么简单吗?这样可以防止WPF控件在逐个添加时闪烁。