【发布时间】:2015-12-10 03:53:11
【问题描述】:
对于我的软件,我正在使用来自 Systems.timer 库的 Timer,每次我的计时器滴答作响时,它都会调用一个方法来重新绘制我的屏幕。我不想清除屏幕,然后重新绘制它。我只想直接在上面画出新的区域。
一开始,我是这样做的:
Constructor{
...
this.timer = new Timer
{
Interval = 10,
};
this.timer.Elapsed += OnPaint;
this.timer.start();
}
public void OnPaint(Object sender, EventArgs e)
{
This.Parent.OnPaintLoadingCircle();
This.Parent.OnPaintReadyToBePaintedAreas();
}
然后我注意到当 OnPaint 方法包含以下内容时,它的绘画速度要快得多:
public void OnPaint(Object sender, EventArgs e)
{
This.Parent.Invalidate();
}
所以我有两个问题:
问题 1:
为什么更快???
因为当我调用 invalidate() 时:
- UI 线程清屏。
- 然后 UI 线程重绘旧区域
- 然后UI线程绘制加载圆
- 然后 UI 线程绘制新区域。
当我调用我的两个方法 OnPaintLoadingCircle() 和 OnPaintReadyToBePaintedArea() 时:
- 定时器线程绘制加载圆
- 然后定时器线程绘制新区域
问题 2:
我想知道它是否存在一种要求控制器在不清除它的情况下绘制表面的方法。 (我试过this.Parent.Update(),this.Parent.Refresh(),都是先清屏)。
非常感谢你帮助我。
【问题讨论】:
标签: c# multithreading user-interface drawing