Windows窗体自定义控件绘制停止

时间:2014-04-18 13:32:53

标签: c# winforms controls paint

我正在制作一个自定义控件来绘制我的模拟。问题是,当它不断地使它失效时(这是因为每个刻度的外观被更改而需要)它会阻止其他控件被绘制(例如属性网格是只要我用鼠标拖动模拟中的对象,就不会更新。

我该如何防止这种行为?窗体的绘制如何工作?此外,当在表单上具有此控件的两个实例时,第一个阻止第二个。所以只有一个被绘制而另一个只是空白。

此处有人已经制作了复杂的用户控件吗?我不能使用其他渲染机制,因为该程序应该用于办公室环境,可能没有合适的图形卡用于硬件加速绘图。

//编辑:发现问题。我的drawcall中有一个Invalidate()in submethod facepalm

2 个答案:

答案 0 :(得分:0)

好的,脏的解决方法来了:

我使用表单计时器来不断重绘我的东西。这让gui无法锁定。它的丑陋...

答案 1 :(得分:0)

我知道我参加晚会很晚,但是您可能想看看Form.OnIdle事件。

当您的应用程序的消息队列为空时,将发生此事件,这意味着所有 other UI更新和用户事件处理均已完成。除非您一直在生成恒定的消息流,否则它们通常会在UI交互期间突然爆发。爆发结束是更新自定义控件的好时机。

IMO根本就不是一个计时器。这是确定最低更新频率的好方法。通常,仅当显示的信息发生更改时,才需要进行更新,或者当一个窗口遮盖然后发现您的信息,从而迫使重新绘制时。但是,如果您不是以这种方式跟踪更改,或者基础信息每秒发生数百次更改,则计时器是控制更新的一种好方法,以使更新仅在特定频率范围内发生。