如果有人可以在以下主题中为我提供建议,我将不胜感激:
我准备了小型 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;
我应该怎么做才能改进我的应用程序。我需要单独的线程来服务鼠标移动事件吗?如果是,那么如何使用它?也许绘图没有优化 - 也许我应该使用另一个控件来绘制移动元素。目前我使用图片框。
如果有人就此问题向我提出建议,我将不胜感激。
感谢帮助,解决方法:
//SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;