Ваш логический поток должен быть отделен от формы, поэтому вам не понадобится DoEvents (). Если вы используете GDI +, вы должны принудительно запустить Update () в цикле. Windows Forms не очень хорошо справляются с двойной буферизацией, поэтому в зависимости от того, насколько сложной будет ваша графика, у вас могут возникнуть проблемы с мерцанием.
Я предлагаю посмотреть на использование управляемой DirectX библиотеки . Это много, чтобы учиться, но дает вам все необходимое.
EDIT:
Недавно я читал о WPF, который выглядит как гораздо лучшая платформа для простых и умеренно сложных игр, поскольку он предоставляет API более высокого уровня, чем управляемая DirectX библиотека . Однако, возможно, у него есть ограничения по производительности и гибкости для более сложных игр.