Нужно включить многопоточность в проекте 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();