C# 我需要在不阻塞UI的情况下在一个面板中绘制10000点

C# 我需要在不阻塞UI的情况下在一个面板中绘制10000点,c#,forms,C#,Forms,我需要在不阻塞UI的情况下在一个面板中绘制10000点。我用的是C#。 目前我正在面板绘制事件中绘制。如何在不阻塞UI的情况下执行此操作。我已经试着在另一根线上“画画”,但没有成功 private void Panel1Paint(object sender, PaintEventArgs paintEventArgs) { var g = paintEventArgs.Graphics; g.DrawLine(new Pen(Color.Black),

我需要在不阻塞UI的情况下在一个面板中绘制10000点。我用的是C#。 目前我正在面板绘制事件中绘制。如何在不阻塞UI的情况下执行此操作。我已经试着在另一根线上“画画”,但没有成功

private void Panel1Paint(object sender, PaintEventArgs paintEventArgs)
    {
        var g = paintEventArgs.Graphics;
        g.DrawLine(new Pen(Color.Black),
                   new Point(0, panel1.Width / 2),
                   new Point(panel1.Height, panel1.Width / 2));
        g.DrawLine(new Pen(Color.Black),
                   new Point(panel1.Width / 2, 0),
                   new Point(panel1.Width / 2, panel1.Height));

        for (int i = 0; i < centres.Length; i++)
        {
            g.FillEllipse(new SolidBrush(colors[i]), centres[i].X, centres[i].Y, 10, 10);
            Console.Out.WriteLine(centres[i].ToCart());
        }

        for (int i = 0; i < 10000; i++)
        {
            int zona = r.Next(0, 3);
            double p_gauss, p_rand;
            int new_x;
            int new_y;
            do
            {
                new_x = r.Next(0, 400);
                p_gauss = Gauss(new_x, centres[zona].X, s[zona].X);
                p_rand = r.NextDouble();
            } while (p_gauss < p_rand);

            do
            {
                new_y = r.Next(0, 400);
                p_gauss = Gauss(new_y, centres[zona].Y, s[zona].Y);
                p_rand = r.NextDouble();
            } while (p_gauss < p_rand);

            g.DrawEllipse(new Pen(colors[zona], 2), new_x, new_y, 1, 1);

        }

    }
private void Panel1Paint(对象发送方,PaintEventArgs PaintEventArgs)
{
var g=paintEventArgs.Graphics;
g、 抽绳(新钢笔(黑色),
新点(0,面板1.宽度/2),
新点(面板1.高度,面板1.宽度/2));
g、 抽绳(新钢笔(黑色),
新点(面板1.0宽/2,0),
新点(面板1.宽度/2,面板1.高度);
对于(int i=0;i
在位图上、在线程中进行绘制。使完成的位图可用于窗体,并让Paint事件一次绘制整个位图

你需要一个自己的线程来调用UI。发布你的绘画代码。