Если вы рисуете элементы управления самостоятельно, возможно, вы захотите выполнить собственную двойную буферизацию.
В последнее время я не держал в курсе последних событий с WinCE и предположил, что они в конечном итоге перенесут простоту двойной буферизации, которую вы получаете на рабочий стол, но, возможно, они этого не сделали.
По сути, предпосылка заключается в том, чтобы просто нарисовать изображение, а затем перетащить это изображение на «настоящий» графический объект за один снимок.
Это что-то вроде этого (это по памяти, так что если синтаксис идеален):
public class DoubleBufferedControl : Control
{
protected override OnPaint(object sender, PaintEventArgs e)
{
using(Bitmap bitmap = new Bitmap(Width, Height))
{
using(Graphics graphics = Graphics.FromImage(bitmap))
{
DoPaint(sender, new PaintEventArgs(graphics));
e.Graphics.DrawImage(bitmap, 0, 0);
}
}
}
protected virtual DoPaint(object sender, PaintEventArgs e)
{
/* left empty for overrides */
}
protected override OnPaintBackground(object sender, PaintEventArgs e)
{
/* do nothing */
}
}
Затем наследуйте все свои собственные элементы управления и добавьте свой код рисования в переопределение DoPaint.
Возможно, вы захотите оптимизировать вышеприведенное, чтобы создать растровое изображение только один раз (ctor), обработать событие resize, а затем воссоздать его при изменении размера, а затем добавить некоторый код удаления, чтобы вы могли. Удалите растровое изображение, когда объект умрет.