Задать вопрос
@Kiril1221

C# Как избавиться от мерцания?

Перечитал где-то 100 статей уже, да конечно стоит чуть усложнить, и привет мерцания, 4 линии не может нарисовать.
Уже Double Double Трибол буфера делаю, и наверное комбинаций 32 перепробовал. + Еще самой форме даю doubleBuffer=true и все это намешал уже миллион раз, ни чего не помогает.

/// Form1.cs        
     GameManager = new GameManager{
                PaintDilegate = () => this.panelGame.Invalidate(),
                PaintInitDilegate = (PaintEventHandler fun) => { this.Paint += fun; },         
            };
       GameManager .init();
       }
   ///////////////////////////
 ///////// GameManager.cs
  class    GameManager {
              /////
            Bitmap DoubleBuffer;
            Graphics gBuf;
           public init(){
                     this.PaintInitDilegate?.Invoke( Paint );          
           }
public void Paint(object sender,PaintEventArgs e)
{
          e.Graphics.DrawImage(DoubleBuffer,0,0);
}
/// вызывается в таймере  постоянно
          public void update(object srnder,PaintEventArgs e){
              if(DoubleBuff==null || (DoubleBuf.Width!=Width){
                       DoubleBuf?.Disponse();
                        DoubleBuffer = new Bitmap(Width, Height);
                         gBuf = Graphics.FromImage(DoubleBuffer); 
                          initMap();     //  ...  нарисовать карту         
              }
              Game.Map.ForEach( (x,y,brushIndex)=>{
                       ///..................  
                       gBuf.FillRect(  ....);
             }
             PaintDilegate?.Invoke(); // отослать панели команду перерисовать
          }
   }

Вот примерно такой код, если правильно переписал, все работает, нету утечек или чего-то такого,
Но не могу избавиться от Миганий.
  • Вопрос задан
  • 215 просмотров
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы