C# Моргание при многопоточном рисовании элементов в WinForms

существует следующая проблема, при рисовании элементов, в отличном от главного потоке вызывается событие

EvNeedToRedraw?.Invoke();

По следующему делегату

public delegate void NeedToRedraw();

Подписывается на событие

EvNeedToRedraw += Redraw; 

И обновляется PictureBox

void Redraw()
{
    BattleField.Invalidate();
}

Если использовать

void Redraw()
{

    BattleField.Refresh();
}

То вылетает следующая ошибка: System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'BattleField' не из того потока, в котором он был создан."

Но если использовать

void Redraw()
{
    BattleField.Invalidate();
}

То возникает моргание, из-за того, что PictureBox обновился, но объекты ещё не отрисовались, или были отрисованны до обновления, т.е. дважды были отрисованны на на одно обновление PictureBox

Код рисования:

 while (true)
        {
            g.Clear(Color.AntiqueWhite);
            lock (ListObj)
            {
                foreach (var i in ListObj)
                    i.Draw(IsNeedToDraw);

                for (int i = 0; i < ListObj.Count; i++)
                    if (ListObj[i].IsNeedToDestroy)
                    {
                        if (ListObj[i].GetType() == new PersonDrawTickImage().GetType())
                            ((PersonDrawTickImage)ListObj[i]).InvokeEventForAddToDrawList(EvNeedToAddStaticPicture);
                        ListObj.RemoveAt(i);
                    } 
            }
            Thread.Sleep(Pause);

            EvNeedToRedraw?.Invoke();

            if (Ticks == 1)
                IsNeedToDraw = false;
            else if(Ticks == MaxTicks)
            {
                Ticks = 0;
                IsNeedToDraw = true;
            }
            Ticks++;

Мне нет нужды отрисовывать несколько объектов каждый тик, для этого необходим счётчик прошедших тиков

Буду благодарен, если объясните где ошибка и как избежать моргания(моргают только объекты, на всех пк)


Ответы (0 шт):