C#桌面图表绘制完成需要很长时间

C#桌面图表绘制完成需要很长时间,c#,.net,C#,.net,我正在使用单击按钮创建C#图表 void myButton_Click(object sender, RoutedEventArgs e) { DrawChart(); MessageBox.Show("Draw complated"); } private void DrawChart() { for (int i = 0; i < 30000; i++) {

我正在使用单击按钮创建C#图表

    void myButton_Click(object sender, RoutedEventArgs e)
    {
       DrawChart();
       MessageBox.Show("Draw complated");
    }

    private void DrawChart()
    {           
        for (int i = 0; i < 30000; i++)
        {               
            Series series = this.chart1.Series.Add(seriesArray[i]);
            series.Points.Add(pointsArray[i]);
        }
    }
void myButton\u单击(对象发送者,路由目标)
{
图纸();
MessageBox.Show(“绘制投诉”);
}
私人虚空图纸()
{           
对于(int i=0;i<30000;i++)
{               
Series Series=this.chart1.Series.Add(seriesArray[i]);
系列点添加(点数组[i]);
}
}
我有大约30000分。因此,当我单击按钮时,消息框立即显示,但图形在5-10秒后绘制。用户之前会收到消息框,但在大约10秒的时间内,图表区域中没有图表


如何解决此问题?

尝试使用图表事件

public partial class Form1 : Form
    {
        private int _pointsCount;

        public Form1()
        {
            InitializeComponent();
        }

        private void Draw()
        {
            _pointsCount = 300000;
            var range = Enumerable.Range(0, _pointsCount);
            Series series = new Series();

            foreach (var i in range)
            {
                series.Points.Add(new DataPoint(0, i));
            }

            chart1.PostPaint += OnDrawingFinished;
            chart1.Series.Add(series);
        }

        private void OnDrawingFinished(object sender, ChartPaintEventArgs e)
        {
            var chart = (Chart)sender;
            var points = chart.Series.SelectMany(x => x.Points).Count();

            if (points < _pointsCount) return;

            MessageBox.Show("Done!");
            chart1.PostPaint -= OnDrawingFinished;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Draw();
        }
    }
公共部分类表单1:表单
{
私人int_pointsCount;
公共表格1()
{
初始化组件();
}
私人提款()
{
_pointsCount=300000;
变量范围=可枚举的范围(0,_pointscont);
系列=新系列();
foreach(范围内的var i)
{
添加(新数据点(0,i));
}
图1.后涂+=绘制完成;
图1.系列。添加(系列);
}
私有void OnDrawingFinished(对象发送方,ChartPaintEventArgs e)
{
var图表=(图表)发送方;
var points=chart.Series.SelectMany(x=>x.points.Count();
如果(点<_点搜索)返回;
MessageBox.Show(“完成!”);
图1.后期绘制-=绘制完成;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
Draw();
}
}

Wokrs在这里为我做第一次尝试。这不是很优雅,但仍然有效。

使用较少的点数,或者如果可能的话,可以兑现图表结果数据为30000,因此我应该使用数据计数。这30000个点中有1000个点用在图表上吗?我的意思是如果速度有问题的话,在图表上加上更少的点。例如,通过将
i++
替换为
i++=30来添加每30个点,为什么要添加这么多系列???这不是该系列的目的!30k积分甚至很多,但系列???为什么要使用多个系列?在将系列添加到图表之前准备一个系列可能是个好主意。但主要的区别在于,您只创建一个系列,而不是30k。另外:您所说的
图表事件
是什么意思?