Нужно включить многопоточность в проекте winforms

Нужно включить Thread, дабы отрисовывающиеся облака не зависели от остальных частей, но в каком месте это сделать - не понимаю. Код с облаками ниже.

class Cloud
{
    static int n = 30, num = 0;
    int[] D = new int[n], 
          X = new int[n],
          Y = new int[n];
    Random rand;
    Pen pen = new Pen(Color.Red);
    Brush br = new SolidBrush(Color.White);
    public void DrawCloud(PaintEventArgs e)
    {
        for (int i = 0; i < n; i++)
        {
            e.Graphics.FillEllipse(br, X[i], Y[i], D[i], D[i]);
            X[i] += 1;
            if (X[0] > 850) newCloud();
        }
    }
    public Cloud(Random r, int n)
    {
        num = n;
        rand = r;
        newCloud();
    }
    private void newCloud()
    {
        D[0] = 30; X[0] = -rand.Next(40, 200) * num; Y[0] = rand.Next(130, 150);
        for (int i = 1; i < n; i++)
        {
            D[i] = rand.Next(D[0] - 10, D[0] + 10);
            X[i] = rand.Next(X[0] - 50, X[0] + 50);
            Y[i] = rand.Next(Y[0] - 10, Y[0] + 15);
        }
    }
}

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

Автор решения: Yotic

Генерируйте облака в другом потоке(Thread, Task, Parallel), а уже при отрисовке вызывайте YourForm.Invoke(() => Draw());

В это примере это даже не нужно, ибо взаимодействие происходит в главном UI потоке.

Graphics g = this.CreateGraphics();
new Thread(() =>
{
    g.FillEllipse(new SolidBrush(Color.LightBlue), new Rectangle(0, 0, 200, 200));
}).Start();
→ Ссылка