如果有人可以在以下主题中建议我,我将不胜感激:
我准备了小型Windows窗体游戏应用程序,它在主窗体上以这种方式实现了以下事件:
Shown += (sender, e) => GameItem.Start();
假设函数Start()负责在形式上绘制球:
while (true)
{
game.BoardUI.pboxBall.Location = new Point(X++, Y++);
game.BoardUI.pboxBall.Image = global::BoringGame.Properties.Resources.redBall;
Application.DoEvents();
}
主表单已实现另一个事件:
MouseMove += (sender, e) => Game.MoveBoard(e.X);
这个事件负责绘制球的结果和反弹。 此事件异步工作,但绘制的电路板闪烁。
我想知道如何实现事件mouseMove,以便鼠标项的绘制移动不闪烁:
public void MoveBoard(int x)
{
new Thread(() =>
{
game.BoardUI.pboxPaddle.Location = new Point(X, Y);
game.BoardUI.pboxPaddle.Image = global::BoringGame.Properties.Resources.ballPad;
}).Start();
}
我尝试使用SynchronizationContext UiSyncContext;
我该怎么做才能改进我的应用。 我需要单独的线程来提供鼠标移动事件吗?如果是,那么如何使用呢? 也许绘图没有优化 - 也许我应该使用另一个控件来绘制移动元素。 目前我使用的是picturebox。
如果有人就此问题向我提出建议,我将非常感激。
感谢您的帮助,解决方案:
//SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;