0

如果有人可以在以下主题中为我提供建议,我将不胜感激:

我准备了小型 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;
4

1 回答 1

1

如果闪烁是问题,那么您可以尝试最小化移动对象被擦除和重新绘制到新位置之间的时间。线程可能无济于事。正如 itsme86 所说,这可能是一个缓冲问题。

于 2013-02-08T20:56:43.123 回答