C#桌面图表绘制完成需要很长时间
我正在使用单击按钮创建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++) {
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。另外:您所说的图表事件是什么意思?